Während der Arbeit an einem System, das ich erstelle, habe ich versucht, die folgende Abfrage in meinem Projekt zu verwenden:
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" ist an meinen PHP-Code gebunden, da ich PDO verwende. 2 ist ein gültiger Wert für ": cat".
Diese Abfrage gibt mir jedoch einen Fehler: "# 1241 - Operand sollte 1 Spalte (n) enthalten"
Was mich verblüfft ist, dass ich denken würde, dass diese Abfrage kein Problem funktionieren würde. Wählen Sie Spalten aus, wählen Sie dann zwei weitere aus einer anderen Tabelle aus und fahren Sie von dort aus fort. Ich kann einfach nicht herausfinden, wo das Problem liegt.
Gibt es eine einfache Lösung oder eine andere Möglichkeit, meine Anfrage zu schreiben?
quelle
COUNT()
wirft die Dinge ein bisschen weg; Die Abfrage, die ich gegeben habe, wird wahrscheinlich aufgrund der Aggregation einen Fehler ergeben. Abhängig von den Zielen Ihrer Abfrage (die mir derzeit nicht klar sind) müssen Sie diese Aggregation möglicherweise in eine Unterabfrage verschieben.Dieser Fehler kann auch auftreten, wenn Sie versehentlich Kommas anstelle
AND
derON
Klausel a verwendenJOIN
:quelle
Dieser Fehler kann auch auftreten, wenn Sie versehentlich
=
anstelleIN
der folgendenWHERE
Klausel verwenden:BEISPIELSWEISE:
quelle
Nun, Sie können nicht mehrere Spalten von einer solchen Unterabfrage erhalten. Zum Glück ist die zweite Spalte schon
posts.posted_by
! So:quelle
Eine andere Stelle, an der dieser Fehler auftreten kann, ist die Zuweisung eines Werts, der ein Komma außerhalb einer Zeichenfolge enthält. Beispielsweise:
quelle
Dieser Fehler kann auch auftreten, wenn Sie versehentlich den
if
Funktionsnamen verpassen .beispielsweise:
Habe dieses Problem, als ich es verpasst habe, wenn in die
if
Funktion zu setzen!quelle
Hier verwenden Sie eine Unterabfrage, aber diese Unterabfrage darf nur eine Spalte zurückgeben. Trennen Sie es, sonst wird ein Fehler angezeigt.
quelle
In meinem Fall bestand das Problem darin, dass ich meine Spaltenauswahl versehentlich in Klammern gesetzt habe:
Und muss sein:
Klingt albern, hat aber diesen Fehler verursacht und es hat einige Zeit gedauert, ihn herauszufinden.
quelle