項目プロパティのテーブルと、次のように構成された user_favorites のテーブルがあります。
- ID
- item_id
- ユーザーID
- お気に入り (ブール値)
ユーザーがアイテムを「お気に入り」にすると、アイテム ID とユーザー ID を使用してこのテーブルに行が追加され、お気に入りのプロパティが 1 に設定されます (「お気に入りから外す」場合は 0 に変更されます)。
ユーザーが製品のリストを表示するときに、ユーザーのお気に入りを表示する方法を理解しようとしています。
現在、ユーザーの検索入力に基づいてクエリを実行し、製品 ID の配列を取得しています。ここで、これらの製品間でクエリを実行して、製品情報のテーブルを作成したいと考えています。また、そのアイテムがユーザーのお気に入りであるかどうかを含めたいと考えています。
私はこのようなことを試しました:
select i.tid, i.name as name, i.image as image, (SELECT favorite FROM user_favorites WHERE user_id=77 ) as favorite
FROM items i
left join user_favorites ufav on (ufav.item_id = i.tid)
WHERE i.tid IN (79, 98, 105 . . .)
order by favorite DESC, name ASC
..しかし、もちろん、Subquery returns more than 1 rowエラーが発生します
私も次のようなことを試しました:
select i.tid, i.name as name, i.image as image, ufav.favorite as favorite
FROM items i
left join user_favorites ufav on (ufav.item_id = i.tid)
WHERE i.tid IN (79, 98, 105 . . .) AND ufav.user_id=77
order by favorite DESC, name ASC
. . . ただし、これはお気に入りのアイテムのみを返します (ご想像のとおり)。ID のリストにあるすべてのアイテムを返したいのですが、「お気に入り」にされていないアイテムも知りたいです。
これを 1 つのクエリで実行できますか、それとも 2 つの個別のクエリを実行するのが最善の方法ですか?