我现在已经构建了一个 SQL 命令,它可以列出具有多个输入的结果。
它看起来像这样,输入 ID 30 和 31
$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 In (30,31)
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 In (30,31)";
我的关系表是
Item ItemRelTo
30 10
31 12
11 12
11 31
30 11
所以我的 SQL 的结果是 Items.ItemID 10,11,11,12 所以我得到了第 11 项的重复项。
我真正想要的是我的输入 (30,31) 的共同点,那就是 Items.ItemID = 11 而不是重复值,所以只有一个结果。
而且我对此很陌生,所以请解释一下,以便白痴可以理解=)
我如何显示我的结果的其余代码是
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result))
{
echo '<tr>';
echo '<td>' . $row['ItemID'] . '</td>';
echo '<td>' . $row['Item'] . '</td>';
echo '<td>' . $row['CatID'] . '</td>';
echo '<td>' . $row['Title'] . '</td>';
echo '<td><img src="Image/',$row['Image'],'"></td>';
echo '<td>' . $row['Desc'] . '</td>';
echo '<td>' . $row['TimeStamp'] . '</td>';
echo '</tr>';
}
这成了我的解决方案。当数据库增长时,可能不是他使用 Count 的最佳方式。感谢迈克帮助我到达那里!
SELECT Items.ItemID, GROUP_CONCAT(ItemRelation.ItemRelTo) AS ItemRelTo, Items.CatID,
Items.Title, Items.Image, Items.Desc, Items.TimeStamp
FROM Items
INNER JOIN ItemRelation
ON Items.ItemID = ItemRelation.Item
Where ItemRelTo IN (30,31)
Group By ItemID
HAVING COUNT(Items.ItemID) > 1