对不起,朋友们,厚(请原谅)我有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()使用此信息对数组进行排序。