作成中のシステムで作業しているときに、プロジェクトで次のクエリを使用しようとしました。
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
users.id AS posted_by_id
FROM users
WHERE users.id = posts.posted_by)
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
WHERE topics.cat_id = :cat
GROUP BY topics.id
PDO を使用しているため、「:cat」は PHP コードによってバインドされています。「:cat」の有効な値は 2 です。
しかし、そのクエリではエラーが発生します: 「#1241 - オペランドには 1 列が含まれている必要があります」
困惑しているのは、このクエリは問題なく動作するだろうと思うことです。列を選択し、別のテーブルからさらに 2 つ選択し、そこから続行します。何が問題なのかまったくわかりません。
これに対する簡単な修正方法、またはクエリを記述する別の方法はありますか?
ベストアンサー1
サブクエリは 2 つの列を選択していますが、それを使用して 1 つの列を投影しています (外部SELECT
句の一部として)。このコンテキストでは、このようなクエリから選択できるのは 1 つの列のみです。
代わりにテーブルへの結合を検討してくださいusers
。これにより、必要な列を選択する際の柔軟性が向上しますusers
。
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
users.username AS posted_by,
users.id AS posted_by_id
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
LEFT OUTER JOIN users ON users.id = posts.posted_by
WHERE topics.cat_id = :cat
GROUP BY topics.id