Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [MySQL] Tabellenspalte nicht gefunden (https://www.delphipraxis.net/93341-%5Bmysql%5D-tabellenspalte-nicht-gefunden.html)

3_of_8 4. Jun 2007 16:25

Datenbank: MySQL • Zugriff über: PHP-MySQL-Extension

[MySQL] Tabellenspalte nicht gefunden
 
Morgen.

Ich hab grad folgendes Problem mit dieser Abfrage:

SQL-Code:
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
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?

mkinzler 4. Jun 2007 16:30

Re: [MySQL] Tabellenspalte nicht gefunden
 
Nimm mal das Feld explizit in die Feldliste auf.

3_of_8 4. Jun 2007 16:54

Re: [MySQL] Tabellenspalte nicht gefunden
 
Gleiches Ergebnis. In der Feldliste nimmt MySQL es an, aber in der ON-Clause findet es die Spalte nicht.

marabu 4. Jun 2007 16:56

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

3_of_8 4. Jun 2007 17:04

Re: [MySQL] Tabellenspalte nicht gefunden
 
Und wie soll ich das machen?

DeddyH 4. Jun 2007 17:06

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

3_of_8 4. Jun 2007 17:10

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:
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
So hab ichs noch probiert, bringt aber keine Änderung.

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

DeddyH 4. Jun 2007 17:41

Re: [MySQL] Tabellenspalte nicht gefunden
 
Na, dann war ich aber nahe dran :lol:

marabu 4. Jun 2007 18:27

Re: [MySQL] Tabellenspalte nicht gefunden
 
Statt der Abfrage auf OR IS NULL kann man auch einen OUTER JOIN verwenden ...

DeddyH 4. Jun 2007 18:29

Re: [MySQL] Tabellenspalte nicht gefunden
 
Ich dachte immer, ein LEFT JOIN ist automatisch ein OUTER JOIN :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.
Seite 1 von 2  1 2      

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