创建一个PHP / mysql数组

时间:2013-04-29 14:10:03

标签: php mysql multidimensional-array

对不起朋友们,请大家(请原谅)我有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数组键进行排序 - 不。

这很容易让我道歉

3 个答案:

答案 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()使用此信息对数组进行排序。