私はコミック サイトを持っており、StackOverflow のものと同様のタグ付けシステムを実装しています。
SO スタイルのタグ付けシステムを導入して、ユーザーにより多くの並べ替えオプションを提供したいと考えました。各ユーザーは、1 つまたは複数のタグを選択して削除できます...各コミック ID は、1 つまたは複数のタグに関連付けられています。
目標は次のとおりです。
- カテゴリもタグも選択されていない場合、関数はすべてのコミックを表示します
- カテゴリ x を選択すると、そのカテゴリのコミックのみが表示されます
- カテゴリ x AND タグ x が選択されている場合、カテゴリ x AND タグ x のすべてのコミックが表示されます
- カテゴリが選択されておらず、タグ x、y、z が選択されている場合、関数はそれらのタグに関連付けられたコミックのみを表示します。
リレーショナル テーブルを使用して、選択したタグ ID に一致する imgid があるかどうかを確認しています。
したがって、データベースでは、画像を複数のタグに関連付けるために (できるはずです)、同じ imgid を別のタグ ID で再度追加する必要があります。
クエリは次のとおりです。
$sql =
"SELECT tbl.*, t.*
FROM $table tbl
LEFT JOIN $assocTable a ON (tbl.id = a.imgID)
LEFT JOIN $tagsTable t ON (t.tagid = a.tagID)
WHERE ";
$sql .= !empty($_SESSION[$sessiontagIDs]) ? "a.tagID IN (" . implode(', ', $_SESSION[$sessiontagIDs]). ") " : "1 = 1";
$sql .= $catquery ." " . $order;
残念ながら、これはコミックがクエリから 2 回表示されていることを意味します。
テーブルまたはクエリの設定が間違っていませんか?
ありがとうございました!