いくつかの入力で結果を一覧表示できる 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 であり、重複する値ではないため、結果は 1 つだけです。
そして、私はこれにかなり慣れていないので、ばかが理解できるように説明してください=)
結果を表示するコードの残りの部分は
$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