-2

对不起,伙计们,很厚(请原谅)我有 3 个带有数据的 MySql 表。每个表都有一个日期(日期戳)的“公共字段”我需要组合每个表中的选择查询并按“总体”日期对数组进行排序。每个表中的日期戳字段具有不同的名称。
例如 table1 - 日期是 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一起创建,但我可以按日期戳数组键排序 - 不。

这很容易,所以我很抱歉

4

3 回答 3

2

您对三个表中的数据结构没有多说,但我看不出您不能在单个查询中进行排序和获取的任何原因。

表 A - 日期字段 - 字段 A

表 B - 日期字段 - 字段 B

表 C - 日期字段 - 字段 C

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

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
于 2013-04-29T14:29:11.977 回答
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 ) 较大,则返回正数,如果第二个参数 ( $b ) 较大,则返回负值。usort()使用此信息对数组进行排序。

于 2013-04-29T14:45:44.383 回答
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),然后用这个查询您的查询

于 2013-04-29T14:27:12.690 回答