Skip to content

Nur geduldete MySQL-Syntax

Ebenfalls bei den Vorbereitungen für MySQL 5 haben wir uns die SQL-Queries angeschaut, die ggf. problematisch werden könnten.

Wir haben die betroffenen (genau 2!) Kunden vor einigen Tagen angeschrieben und sie darauf hingewiesen. Es geht primär um SELECTs über mehrere Tabellen in Verbindung mit JOINs, die in einer speziellen Form von MySQL 5 nicht mehr geduldet werden, jedoch von Version 4.x.

Wir waren verwundert, dass es wirklich nur 2 Kunden waren, andererseits ist es auch von Vorteil :-)

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Scriptblogger

Könntest du eventuell ein konkretes Beispiel geben?

Denis

Konkretes -gekürztes- Beispiel: :-)
(ich geh mal davon aus, dass Manuel keine SQLs von Kunden rausgeben darf, daher ein eigenes)

Situation:
- Ein Forum in der Beitragsansicht
- JOIN auf den Verfasser - der ist immer vorhanden
- LEFT JOIN auf den letzten "Bearbeiter" - muss nicht vorhanden bzw. zwingend identisch sein (Bsp: Moderator)

----

SELECT
p.posting_text,
u.id user_id,
u.username user_name,
e.id last_edit_id,
e.username last_edit_name
FROM
forum_postings p,
user u
LEFT JOIN
user e
ON
e.id = p.last_editor
WHERE
p.thread = 400
AND u.id = p.user
ORDER BY
p.id

----

Mit MySQL 4.1 - funktioniert absolut reibungslos und schön schnell.

Mit MySQL 5 dagegen folgender Fehler:
#1054 - Unknown column 'p.last_editor' in 'on clause'

zkoo

nur zwei?? du hast mir tatsächlich praktisch quasi eine echte persönliche email geschrieben? :-)

ich dachte im ernst, dein serienmailer sei einfach gut eingestellt und wollte schon fragen, welches programm du da nutzt :-)

(nebenbei habe ich nicht den geringsten plan, was nun zu tun ist, aber ich schaue es mir noch an :-))

Scriptblogger

Es sollte reichen, Klammern um die Tabellennamen im FROM-Teil zu setzen. Um bei dem oben aufgeführten SQL-Statement zu bleiben:

[...]
e.username last_edit_name
FROM
(forum_postings p,
user u)
LEFT JOIN
user e
[...]

Alternative: Da du beim Abfragen mehrer Tabellen einen "join" ausführst, könntest du das auch gleich im SQL-Statement deutlich machen:

[...]
e.username last_edit_name
FROM forum_postings p
JOIN user u ON (u.id = p.user)
LEFT JOIN
user e
[...]

tom

Der Grund ist eigentlich klar, oder?

Der durchschnittliche MySQL-User weiss mit einem JOIN eh nix anzufangen.

:-)

Denis

GEIL! Das funktioniert! :D

Riieeeeeessen Dankeee!!! :-) :-) :-)
Da wär ich selbst wohl kaum drauf gekommen. :)

Norbert Tretkowski

Das ganze ist übrigens auch dokumentiert:

http://dev.mysql.com/doc/refman/5.0/en/join.html

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

BBCode-Formatierung erlaubt
Formular-Optionen