Ich habe folgende MySQL-Abfrage:
SELECT posts.id, posts.name, LEFT(posts.content, 400), posts.author, posts.date, users.display_name,
GROUP_CONCAT(tags.tag ORDER BY tag_linking.pid ASC SEPARATOR ",") update_tags
FROM posts, tag_linking, tags
INNER JOIN `users`
ON posts.author=users.id;
WHERE tag_linking.pid = posts.id
AND tags.id = tag_linking.tid
ORDER BY posts.date DESC
Welches, was Sie sehen können, verbindet drei Tabellen usw. usw. Wie auch immer, das Problem ist, dass es einen Fehler gibt:
ERROR CODE:
SQL Error (1054): Unknown column 'posts.author' in 'on clause'
auch wenn diese einfachere Abfrage auf einer anderen Seite funktioniert:
SELECT posts.id, posts.name, LEFT(posts.content, 400), posts.author, posts.date, users.display_name FROM `posts`
INNER JOIN `users`
ON posts.author=users.id
Hat jemand Gedanken darüber, warum dies geschieht? Danke für Ihre Hilfe.
weil deine mix join syntax
Der Kommaoperator hat jedoch eine geringere Priorität als INNER JOIN, CROSS JOIN, LEFT JOIN usw. Wenn Sie bei einer Join-Bedingung Komma-Joins mit den anderen Join-Typen mischen, kann ein Fehler der Form Unbekannte Spalte 'col_name' in 'on-Klausel' auftreten . Informationen zur Behebung dieses Problems finden Sie weiter unten in diesem Abschnitt.
die Lösung ist:
Gruppieren Sie die ersten beiden Tabellen explizit mit Klammern, damit der Join verarbeitet werden kann, sodass die Operanden für die ON-Klausel (t1, t2) und t3 sind:
SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);
Alternativ , vermeiden Sie die Verwendung des Komma-Operators und verwenden Sie stattdessen JOIN:
SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);
ist es das Semikolon, das Sie haben ON posts.author=users.id;
Wenn Sie Ihren Tabellen in der from
-Klausel einen Alias geben und sie in Klammern setzen, funktioniert dies. Das Mischen von Joins ist jedoch immer noch eine schlechte Praxis.
Es heißt einfach, dass der Autor in der Post-Tabelle nicht existiert. entweder ein Rechtschreibfehler?