![]() |
Datenbank: MySQL • Zugriff über: PHP-MySQL-Extension
[MySQL] Tabellenspalte nicht gefunden
Morgen.
Ich hab grad folgendes Problem mit dieser Abfrage:
SQL-Code:
Diese Abfrage funktioniert auf meinem lokalen MySQL-Server prima. Der MySQL-Server von Pytal aber meldet "#1054 - Unknown column 'u.userid' in 'on clause'". Die Tabellenstruktur ist auf beiden Servern gleich, die MySQL-Version des lokalen Servers ist 4.1.14, die des Pytal-Servers 5.0.32. Hat sich die Syntax denn so grundlegend verändert, dass man nicht mal mehr einen einfachen LEFT JOIN so machen kann wie in der Version 4?
SELECT u.*, IFNULL(v.value, o.default) AS showemail FROM ni_users u, ni_useroptions o LEFT JOIN ni_useroptionvalues v ON (v.optionid=o.optionid AND v.userid=u.userid) WHERE o.name='showemail' LIMIT 0,50
|
Re: [MySQL] Tabellenspalte nicht gefunden
Nimm mal das Feld explizit in die Feldliste auf.
|
Re: [MySQL] Tabellenspalte nicht gefunden
Gleiches Ergebnis. In der Feldliste nimmt MySQL es an, aber in der ON-Clause findet es die Spalte nicht.
|
Re: [MySQL] Tabellenspalte nicht gefunden
Hallo Manuel,
entzerre mal die Joins - du verwurschtelst da u, v und o in einer ON-Klausel. MySQL 5 ist da wesentlich strikter, was die Bewertung von SQL-Syntax angeht. Grüße vom marabu |
Re: [MySQL] Tabellenspalte nicht gefunden
Und wie soll ich das machen?
|
Re: [MySQL] Tabellenspalte nicht gefunden
So vielleicht:
SQL-Code:
SELECT u.*, IFNULL(v.value, o.default) AS showemail FROM ni_users u
LEFT JOIN ni_useroptionvalues v ON v.userid=u.userid LEFT JOIN ni_useroptions o ON v.optionid=o.optionid WHERE o.name='showemail' LIMIT 0,50 |
Re: [MySQL] Tabellenspalte nicht gefunden
Ah ja, klingt gut... Funktioniert aber nicht ganz: Datensätze, bei für die es keine Zeile in ni_useroptionvalues gibt, sollen nämlich auch ausgegeben werden, und zwar mit dem Wert o.default.
SQL-Code:
So hab ichs noch probiert, bringt aber keine Änderung.
SELECT u.*, IFNULL(v.value, o.default) AS showemail FROM ni_users u
LEFT JOIN ni_useroptionvalues v ON (v.userid=u.userid OR v.userid IS NULL) LEFT JOIN ni_useroptions o ON v.optionid=o.optionid WHERE o.name='showemail' LIMIT 0,50 EDIT: Logisch, dass das nicht geht. So aber:
SQL-Code:
SELECT u.*, IFNULL(v.value, o.default) AS showemail FROM ni_users u
LEFT JOIN ni_useroptionvalues v ON (v.userid=u.userid) LEFT JOIN ni_useroptions o ON (v.optionid=o.optionid OR v.optionid IS NULL) WHERE o.name='showemail' LIMIT 0,50 |
Re: [MySQL] Tabellenspalte nicht gefunden
Na, dann war ich aber nahe dran :lol:
|
Re: [MySQL] Tabellenspalte nicht gefunden
Statt der Abfrage auf OR IS NULL kann man auch einen OUTER JOIN verwenden ...
|
Re: [MySQL] Tabellenspalte nicht gefunden
Ich dachte immer, ein LEFT JOIN ist automatisch ein OUTER JOIN :gruebel:
|
Re: [MySQL] Tabellenspalte nicht gefunden
Hallo Deddy,
ein LEFT JOIN ist ein LEFT OUTER JOIN, aber in diesem Fall hätte man entweder einen RIGHT JOIN verwenden oder die Tabellen anders anordnen müssen um den empfohlenen LEFT JOIN verwenden zu können. Freundliche Grüße |
Re: [MySQL] Tabellenspalte nicht gefunden
OK, wo Du Recht hast, hast Du Recht :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz