UWI: MySql: mehrere SELECTS´s in einer abfrage

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

  1. 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

  2. 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

    1. 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

      1. 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