对不起朋友们,请大家(请原谅)我有3个带有数据的MySql表。每个表都有一个日期(日期戳)的“公共字段”,我需要组合每个表中的选择查询,并按“整体”日期对数组进行排序。每个表中的日期戳字段具有不同的名称 例如table1 - date是table1_date等。
除非可以将3个查询作为子查询运行,否则不是“加入”选择查询的问题?
每个表中的数据字段会有所不同,因此我需要创建的是使用datestamp字段(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
在一起,但我可以对datestamp数组键进行排序 - 不。
这很容易让我道歉
答案 0 :(得分:2)
你没有多说三个表中数据的结构,但我看不出你为什么不能在一个查询中进行排序和提取的原因。
表A. - datefield - fieldA
表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
答案 1 :(得分:1)
不确定我的问题是否正确但你为什么不这样做:
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)并使用此命令对您的查询进行排序
答案 2 :(得分:1)
如果您已经拥有包含表格行的三个数组,则可以合并数组( 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 )较大则结果为正数,如果第二个参数(< strong> $ b )更大。 usort()使用此信息对数组进行排序。