SQL-Code von MySQL V.4 u. V.5 nicht kompatibel ?

SQL-Code von MySQL V.4 u. V.5 nicht kompatibel ?

am 04.10.2006 13:23:10 von Robert_Fall

Hallo

Habe ein DB_Abfrage-Testscript (SQL-Code siehe unten) das auf mysql v.
4.0.24 problemlos funktioniert ( siehe
http://fally.akis.at/DB_Abfrage_Beispiel.php )
auf mysql v. 5.0.21 getestet.

Dabei bekomme ich untenstehende SQL-Fehlermeldung.

Hat sich da etwas entscheidendes geändert bzw. welcher Fehler steckt da in
meiner Abfrage ?

Wäre für Hinweise und eure Hilfe dankbar.

Robert


S Q L-C o d e:
SELECT * FROM fahrzeug_rela f INNER JOIN colour c, ps p ON c.cid = f.cid and
p.pid = f.pid WHERE f.auto like %s and c.farbe like %s and p.ps like %s
ORDER BY f.auto

Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'ON c.cid = f.cid
and p.pid = f.pid WHERE f.auto like '-1' and c.farbe like '-1' ' at line 1

Re: SQL-Code von MySQL V.4 u. V.5 nicht kompatibel ?

am 04.10.2006 15:33:23 von Robert_Fall

Axel Schwenke wrote

> Das ist ein ganz alter Hut. Der SQL-Parser ab MySQL 5.0 erlaubt es
> nicht mehr, für JOINs die Syntax mit JOIN und Komma gleichzeitig zu
> verwenden. Also entweder alles mit Komma oder - IMHO besser - alles
> mit dem JOIN Schlüsselwort.
>
> Warum besser: die JOIN Syntax zwingt dazu, JOIN-Bedingung und Such-
> kriterien (WHERE) getrennt hinzuschreiben. Die entstehenden Queries
> sind von Menschen besser lesbar (dem SQL-Parser ist es egal).
> Das ist ein ganz alter Hut. Der SQL-Parser ab MySQL 5.0 erlaubt es
> nicht mehr, für JOINs die Syntax mit JOIN und Komma gleichzeitig zu
> verwenden. Also entweder alles mit Komma oder - IMHO besser - alles
> mit dem JOIN Schlüsselwort.
>
> Warum besser: die JOIN Syntax zwingt dazu, JOIN-Bedingung und Such-
> kriterien (WHERE) getrennt hinzuschreiben. Die entstehenden Queries
> sind von Menschen besser lesbar (dem SQL-Parser ist es egal).


Danke dir für deine Antwort.

Aber wie soll ich den dann die Abfrage notieren ?
So firm bin ich mit SQL nicht.
Wenn ich das Komma rausnehme läufts auch nicht auf v. 4.0.24.


echo "$verabschiedung $name";

Re: SQL-Code von MySQL V.4 u. V.5 nicht kompatibel ?

am 05.10.2006 14:51:27 von Axel Schwenke

"Robert_Fall" wrote:
>
> Habe ein DB_Abfrage-Testscript (SQL-Code siehe unten) das auf mysql v.
> 4.0.24 problemlos funktioniert auf mysql v. 5.0.21 getestet.
> Dabei bekomme ich untenstehende SQL-Fehlermeldung.

> SELECT * FROM fahrzeug_rela f INNER JOIN colour c, ps p ON c.cid = f.cid and
> p.pid = f.pid WHERE f.auto like %s and c.farbe like %s and p.ps like %s
> ORDER BY f.auto
>
> You have an error in your SQL syntax; check the manual that corresponds to
> your MySQL server version for the right syntax to use near 'ON c.cid = f.cid
....

Das ist ein ganz alter Hut. Der SQL-Parser ab MySQL 5.0 erlaubt es
nicht mehr, für JOINs die Syntax mit JOIN und Komma gleichzeitig zu
verwenden. Also entweder alles mit Komma oder - IMHO besser - alles
mit dem JOIN Schlüsselwort.

Warum besser: die JOIN Syntax zwingt dazu, JOIN-Bedingung und Such-
kriterien (WHERE) getrennt hinzuschreiben. Die entstehenden Queries
sind von Menschen besser lesbar (dem SQL-Parser ist es egal).


XL

Re: SQL-Code von MySQL V.4 u. V.5 nicht kompatibel ?

am 05.10.2006 16:25:06 von Axel Schwenke

"Robert_Fall" wrote:
> Axel Schwenke wrote
>
>> Das ist ein ganz alter Hut. Der SQL-Parser ab MySQL 5.0 erlaubt es
>> nicht mehr, für JOINs die Syntax mit JOIN und Komma gleichzeitig zu
>> verwenden. Also entweder alles mit Komma oder - IMHO besser - alles
>> mit dem JOIN Schlüsselwort.

> Danke dir für deine Antwort.
>
> Aber wie soll ich den dann die Abfrage notieren ?
> So firm bin ich mit SQL nicht.
> Wenn ich das Komma rausnehme läufts auch nicht auf v. 4.0.24.

statt

SELECT *
FROM fahrzeug_rela f
INNER JOIN colour c
, ps p ON c.cid = f.cid and p.pid = f.pid
WHERE f.auto like %s
and c.farbe like %s
and p.ps like %s
ORDER BY f.auto

einfach so

SELECT ...
FROM fahrzeug_rela AS f
INNER JOIN colour AS c ON c.cid = f.cid
INNER JOIN ps AS p ON p.pid = f.pid
WHERE f.auto LIKE %s
AND c.farbe LIKE %s
AND p.ps LIKE %s
ORDER BY f.auto

Die jeweils erlaubte JOIN Syntax kannst du im Manual nachlesen.

Ab 4.x ist das INNER vor JOIN optional (einfach JOIN reicht), frühere
Versionen von MySQL wollen das aber sehen. Schreibs einfach immer hin.

Weil es mir gerade auffällt: SELECT * ist keine Empfehlung des Hauses.
"Warum soll ich nicht SELECT * schreiben?"
-> http://www.php-faq.de/q/q-sql-select.html


XL

Re: SQL-Code von MySQL V.4 u. V.5 nicht kompatibel ?

am 05.10.2006 17:14:57 von exquisite

>
> einfach so
>
> SELECT ...
> FROM fahrzeug_rela AS f
> INNER JOIN colour AS c ON c.cid =3D f.cid
> INNER JOIN ps AS p ON p.pid =3D f.pid
> WHERE f.auto LIKE %s
> AND c.farbe LIKE %s
> AND p.ps LIKE %s
> ORDER BY f.auto
>
> Die jeweils erlaubte JOIN Syntax kannst du im Manual nachlesen.
>
> Ab 4.x ist das INNER vor JOIN optional (einfach JOIN reicht), frühere
> Versionen von MySQL wollen das aber sehen. Schreibs einfach immer hin.
>
> Weil es mir gerade auffällt: SELECT * ist keine Empfehlung des Hauses.
> "Warum soll ich nicht SELECT * schreiben?"
> -> http://www.php-faq.de/q/q-sql-select.html

..

Merci vielmals

it's working properly

Robert

PS: Da ich in meinen NEWS-Reader weder dein letztes Post noch meine
Replik davor noch immer nicht zur Verfügung habe, muß ich dir über
meinen Google-Account antworten