创建一个PHP/mysql数组



对不起,朋友们,厚(请原谅)我有3 MySql表的数据。每个表都有一个日期(日期戳)的"公共字段",我需要组合来自每个表的选择查询,并按"总体"日期对数组排序。每个表中的日期戳字段都有不同的名称。
例如table1 - date是table1_date等

这不是一个问题的"加入"的选择查询,除非有可能运行3查询作为子查询?

每个表中的数据字段将有所不同,因此我需要创建的是一个按日期戳字段(desc)排序的单个数组。当然,我可以为每个表选择查询。

。array1将是(我认为)(我想使用字段名作为数组内的键,因此下面)

array = table1_date=>array(//field named => field values //)
array2 = table2_date=>array(//field named => field values //)
array3 = table3_date=>array(//field named => field values //)

我是"厚",因为我可以创建数组,我可以array_push在一起,但我可以排序的日期戳数组键-不。

这可能很简单,所以我道歉

你没有说太多关于这三个表的数据结构,但是我看不出为什么你不能在一个查询中进行排序和提取。

表——datefield——基坑

表B——datefield——fieldB

表C——datefield——fieldC

现在可以通过不同的方式在单个查询中获取数据。最简单的是

select
  a.datefield datefield,
  a.fieldA datafield
from
  tablea a
union
  select
    b.datefield,
    b.fieldB
  from
    tableb b
union
  select
    c.datefield,
    c.fieldB
  from
    tablec c
order by
  datefield

如果您只想排序,但不想将字段合并,您可以这样做:

select
  a.datefield datefield,
  a.fieldA datafielda
  null datafieldb
  null datafieldc
from
  tablea a
union
  select
    b.datefield,
    null
    b.fieldB
    null
  from
    tableb b
union
  select
    c.datefield,
    null
    null
    c.fieldB
  from
    tablec c
order by
  datefield

不确定我是否理解对了你的问题,但你为什么不这样做呢:

SELECT t1.*,
t2.field1,
t2.field2,
t3.field1,
...
FROM t1
JOIN t2
JOIN t3
ORDER BY t1.dat

所以如果t1。Dat1 = t2。Dat2 = t3。Dat3,只需在查询中选择其中一个(不要选择t2)。Dat2而不是t3.dat3),并使用这个

命令查询。

如果已经有了包含表行的三个数组,则可以合并这些数组(merge_array()),并使用用户定义的函数(usort())

对结果数组进行排序。

下面是一个例子:

$array_to_sort = array_merge($array1, $array2, $array3);
function date_compare($a, $b)
{
    $t1 = strtotime($a['datetime']);
    $t2 = strtotime($b['datetime']);
    return $t1 - $t2;
}    
usort($array, 'date_compare');
然后,

usort()将向用户定义的控件传递数组的两个元素,您可以在其中执行日期检查。检查将返回差值,因此如果两个日期相等,结果将为0;如果第一个参数($a)较大,结果将为正数;如果第二个参数($b)较大,结果将为负值。usort()使用此信息对数组进行排序。

相关内容

  • 没有找到相关文章

最新更新