2 SQL查询到一个数组,然后排序数组和显示

时间:2013-07-30 18:29:24

标签: php sql arrays

我有两个SQL查询要存储在一个可以排序的数组中。

SQL 1

$sql = "SELECT ItemRelation.ItemRelTo, ItemRelation.Item, Items.CatID, Items.ItemID,   
Items.Title, Items.Image, Items.Desc, Items.TimeStamp
FROM Items
INNER JOIN ItemRelation 
ON ItemRelation.ItemRelTo=Items.ItemID
WHERE ItemRelation.Item = " . $filterbyitem;

SQL 2

$sql2 = "SELECT ItemRelation.ItemRelTo, ItemRelation.Item, Items.CatID, Items.ItemID,     
Items.Title, Items.Image, Items.Desc, Items.TimeStamp
FROM Items
INNER JOIN ItemRelation
ON ItemRelation.Item=Items.ItemID
WHERE ItemRelation.ItemRelTo = " . $filterbyitem;

现在我用两个数组列出它们,但是想把它们合二为一,这样我就可以按Items.TimeStamp进行排序,然后在列表中显示它们。或者是否可以对它们进行一次SQL查询?

我可以补充一点,查询中的连接条件不同。

5 个答案:

答案 0 :(得分:3)

您可以使用UNION:

从两者中进行一次查询
$sql = "SELECT ItemRelation.ItemRelTo, ItemRelation.Item, Items.CatID, Items.ItemID,   
Items.Title, Items.Image, Items.Desc, Items.TimeStamp
FROM Items
INNER JOIN ItemRelation 
ON ItemRelation.ItemRelTo=Items.ItemID
WHERE ItemRelation.Item = " . $filterbyitem . "
UNION
SELECT ItemRelation.ItemRelTo, ItemRelation.Item, Items.CatID, Items.ItemID,     
Items.Title, Items.Image, Items.Desc, Items.TimeStamp
FROM Items
INNER JOIN ItemRelation
ON ItemRelation.Item=Items.ItemID
WHERE ItemRelation.ItemRelTo = " . $filterbyitem;

然后您可以在查询中对它们进行排序,返回的结果将按您想要的顺序排列。

答案 1 :(得分:3)

使用结合OR的SQL ORDER BY语句对它们进行排序。

"WHERE ItemRelation.Item = ".$filterbyitem." OR 
  ItemRelation.ItemRelTo = ".$filterbyitem." ORDER BY Items.TimeStamp";

无需在php中管理数组。

答案 2 :(得分:0)

看看这个功能:

http://php.net/manual/en/function.array-merge.php

<?php
    $result = array_merge($sql1, $sql2);
    print_r($result);
?>

答案 3 :(得分:0)

您可以使用OR语句,并确保在ON命令中使用它,如下所示:

$sql = "SELECT DISTINCT ItemRelation.ItemRelTo, ItemRelation.Item, Items.CatID, Items.ItemID,   
Items.Title, Items.Image, Items.Desc, Items.TimeStamp
FROM Items
INNER JOIN ItemRelation 
ON ((ItemRelation.ItemRelTo=Items.ItemID) OR (ItemRelation.Item=Items.ItemID))
WHERE ItemRelation.Item = " . $filterbyitem."
OR ItemRelation.ItemRelTo = " . $filterbyitem;

我不认为有些人注意到你的ON条款不一样。

答案 4 :(得分:0)

由于除条件外两个查询都相同,因此您可以重写为:

SELECT ...
FROM ...
WHERE $filterbyitem IN (ItemRelation.Item, ItemRelation.ItemRelTo)
ORDDER BY TimeStamp