別のテーブルからの ID のリストを含めたい MySQL クエリがあります。Web サイトでは、ユーザーは特定のアイテムを追加でき、それらのアイテムをお気に入りに追加できます。私は基本的に、そのアイテムをお気に入りに登録した人の ID のリストを取得したいと考えています (これは少し単純化されていますが、要約すると次のようになります)。
基本的に、私は次のようなことをします:
SELECT *,
GROUP_CONCAT((SELECT userid FROM favourites WHERE itemid = items.id) SEPARATOR ',') AS idlist
FROM items
WHERE id = $someid
このようにして、コード内で idlist を後で PHP の配列に分割することで、誰がアイテムをお気に入りにしたかを示すことができますが、次の MySQL エラーが発生します。
1242 - サブクエリが複数の行を返す
GROUP_CONCAT
それが、たとえばCONCAT
?の代わりに使用するポイントのようなものだと思いました。私はこれについて間違った方法で進んでいますか?
わかりました、これまでの回答に感謝します。うまくいくようです。ただし、落とし穴があります。そのユーザーによって追加されたアイテムもお気に入りと見なされます。そのため、作成者 = ユーザー ID かどうかを確認するために、追加のチェックが必要になります。誰かがこれを行うためのスマートな(そしてできれば効率的な)方法を考え出すのを手伝ってもらえますか?
ありがとうございました!
編集:私はこれをやろうとしました:
SELECT [...] LEFT JOIN favourites ON (userid = itemid OR creator = userid)
そしてidlistは空です。INNER JOIN
代わりに使用するLEFT JOIN
と、空の結果が得られることに注意してください。ON要件を満たす行があると確信していますが。