MySql: mehrere SELECTS´s in einer abfrage
UWI
- datenbank
hallo zusammen,
ich habe eine anwendung von einem server mit einer
4.1.15 MySql datenbank auf einen server mit einer
4.0.24 MySql datenbank verschoben und nun klappen
die wichtigsten abfragen nicht mehr was wohl daran liegt
das sie aus mehreren selects in einer abfrage bestehen .
SELECT x AS ref, geb_id, user_id AS uid, typ, hitpoints,
( SELECT COUNT( x ) FROM War_Schlacht WHERE x = ref ),
( SELECT name FROM user WHERE id=uid )
FROM Lageplan WHERE ( ".$OR." ) Order by x LIMIT 144
die tabellen dazu sind an dieser stelle egal denn auf dem
alten system lief es ...
der fehler ist nun immer:
#1064 - You have an error in your SQL syntax.
weiss jemand ob das in der 4.0.25 versin noch garnicht ging
oder ob ich dafür einfach eine falsche syntax verwende ?
vielen dank
uwi
yo,
weiss jemand ob das in der 4.0.25 versin noch garnicht ging
oder ob ich dafür einfach eine falsche syntax verwende ?
unterabfragen unterstützt mysql erst ab 4.1 und höher.
Ilja
Hallo Uwi,
ich habe eine anwendung von einem server mit einer
4.1.15 MySql datenbank auf einen server mit einer
4.0.24 MySql datenbank verschoben und nun klappen
die wichtigsten abfragen nicht mehr was wohl daran liegt
das sie aus mehreren selects in einer abfrage bestehen .
Subqueries nennt man das.
Wie Dir das MySQL-Handbuch, Abschnitt Subquery-Syntax sagt, werden Subqueries erst seit der Version 4.1 unterstützt.
SELECT x AS ref, geb_id, user_id AS uid, typ, hitpoints,
( SELECT COUNT( x ) FROM War_Schlacht WHERE x = ref ),
( SELECT name FROM user WHERE id=uid )
FROM Lageplan WHERE ( ".$OR." ) Order by x LIMIT 144
Vielleicht kannst Du die Abfrage umschreiben, so dass Du Dein Ergebnis auch ohne Subqueries erreichst. Dein zweites Subselect sollte sich durch einen Join ersetzen lassen:
~~~sql
SELECT
lp.x AS ref,
lp.geb_id,
lp.user_id AS uid,
lp.typ,
lp.hitpoints,
( SELECT COUNT(x)
FROM War_Schlacht
WHERE x = ref ),
user.name
FROM Lageplan lp
INNER JOIN user on user.id = lp.user_id
WHERE [...]
ORDER BY x
LIMIT 144
Nun bleibt nur noch ein Subquery übrig. Vielleicht kannst Du den MAX-CONCAT-Trick, auf COUNT() umbauen, wenn Du unbedingt auf MySQL 4.0.x angewiesen bist.
Freundliche Grüße
Vinzenz
Wie Dir das MySQL-Handbuch, Abschnitt Subquery-Syntax sagt, werden Subqueries erst seit der Version 4.1 unterstützt.
Da ich mich auch mit MySQL in verschiedenen Versionen beschäftige ...
Ganz schön happig, so wichtige Dinge wie Subqueries in einer Unterversion 4.0 - 4.1 zu unterscheiden.
Da bleibe ich beim Codieren wohl doch besser bei Version 3.x, denn ich kann die Datenbank ja nicht per SQL auf meinem Webspace einrichten.
B U M M M M
Es platzte gerade meine Hoffnung auf moderneres SQL, wie ich es 1998 schon mit ORACLE hatte (allerdings nicht im Web). Es ist ja ein Spiel mit 27 Unbekannten. Ach was, 327 !
Kalle
Da bleibe ich beim Codieren wohl doch besser bei Version 3.x, denn ich kann die Datenbank ja nicht per SQL auf meinem Webspace einrichten.
Per FTP meinte ich. Sind ja auch 3 Buchstaben. Oder war es doch PHP? Nein, eher HTM. Ach, ich bin noch nicht ganz frisch, schmeisse erstmal einen MP3 Song zum Wachwerden an.
Kalle