MySQL - l'Opérande doit contenir 1 colonne(s)
Tout en travaillant sur un système que je suis en création, j'ai tenté d'utiliser la requête suivante dans mon projet:
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" est lié par mon code PHP que j'utilise PDO. 2 est une valeur valide pour "cat".
Cette requête si me donne une erreur: "#1241 - l'Opérande doit contenir 1 colonne(s)"
Ce que les souches moi, c'est que je pense que cette requête ne fonctionne pas problème. Sélectionner des colonnes, puis en sélectionnant deux de plus à partir d'une autre table, et continue à partir de là. Je n'arrive pas à comprendre quel est le problème.
Est-il une solution simple à ce problème, ou une autre façon d'écrire ma requête?
Vous devez vous connecter pour publier un commentaire.
Votre sous-requête est de sélectionner les deux colonnes, tandis que vous l'utilisez à projet de la colonne (comme la partie externe de la
SELECT
clause). Vous ne pouvez sélectionner qu'une colonne d'une telle requête dans ce contexte.Envisager de se joindre à la
users
table au lieu de cela, cela vous donnera plus de flexibilité lorsque vous sélectionnez les colonnes que vous voulez deusers
.COUNT()
est en train de jeter des choses un peu; la requête que je vous ai donné donnera probablement une erreur due à l'agrégation. Vous devrez peut-être déplacer l'agrégation dans une sous-requête, selon les objectifs de votre requête (qui ne sont pas clair pour moi en ce moment).Cette erreur peut également se produire si, par inadvertance, vous utilisez des virgules au lieu de
AND
dans leON
clause deJOIN
:Bien, vous ne pouvez pas obtenir plusieurs colonnes d'une sous-requête comme ça. Heureusement, la deuxième colonne est déjà
posts.posted_by
! Donc:Cette erreur peut également se produire si vous avez accidentellement utilisation
=
au lieu deIN
dans leWHERE
clause:PAR EXEMPLE:
Un autre lieu cette erreur peut se produire en est l'attribution d'une valeur qui a une virgule en dehors d'une chaîne. Par exemple: