0

我有两个 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 查询?

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

4

5 回答 5

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;

然后您可以在查询中对它们进行排序,并且返回的结果已经按照您想要的顺序。

于 2013-07-30T18:32:49.460 回答
3

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

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

无需在 php 中管理数组。

于 2013-07-30T18:33:12.040 回答
0

看看这个功能:

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

<?php
    $result = array_merge($sql1, $sql2);
    print_r($result);
?>
于 2013-07-30T18:31:54.577 回答
0

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

SELECT ...
FROM ...
WHERE $filterbyitem IN (ItemRelation.Item, ItemRelation.ItemRelTo)
ORDDER BY TimeStamp
于 2013-07-30T18:36:42.973 回答
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 子句不一样。

于 2013-07-30T18:36:02.550 回答