我有两个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查询?
我可以补充一点,查询中的连接条件不同。
答案 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