MySQL-операнд должен содержать 1 столбец(ы)
во время работы над системой, которую я создаю, я попытался использовать следующий запрос в своем проекте:
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
": cat " связан моим PHP-кодом, поскольку я использую PDO. 2-допустимое значение для параметра": cat".
этот запрос, хотя и дает мне ошибку: "#1241-операнд должен содержать 1 столбец(ы)"
что меня озадачивает, так это то, что я думаю, что этот запрос не будет работать без проблем. Выбор столбцов, затем выбор еще двух из другой таблицы и продолжение оттуда. Я просто не могу понять, в чем проблема.
есть ли простое исправление для этого, или другой способ написать мой запрос?
5 ответов:
ваш подзапрос выбирает два столбца, в то время как вы используете его для проецирования одного столбца (как часть внешнего
SELECT
предложения). В этом контексте можно выбрать только один столбец из такого запроса.подумайте о присоединении к
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
эта ошибка также может возникнуть, если вы случайно используете запятые вместо
AND
наON
пунктJOIN
:JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2) ^ should be AND, not a comma
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)
Ну, вы не можете получить несколько столбцов из одного подзапроса, как это. К счастью, второй столбец уже
posts.posted_by
! Итак:SELECT topics.id, topics.name, topics.post_count, topics.view_count, posts.posted_by COUNT( posts.solved_post ) AS solved_post, (SELECT users.username AS posted_by_username FROM users WHERE users.id = posts.posted_by) ...