Martin Hein: verschachteltes Select-Statement in 4.0

Hallo Forum,

ich habe ein verschachteltes Select-Statement geschrieben. Das
funktioniert auf meiner Entwicklungsumgebung. Jetzt zeigt sich,
dass es leider auf dem Liveserver nicht funktioniert, weil da
eine alte MySQL 4.0 läuft. Mein Fehler, auf einer neueren Version
zu entwickeln. Ich weiss.

Meine Frage:

Kann ich diese Verschachtelung mit MySQL alternativ ausdrücken,
so dass sie auf der alten Version funktioniert, oder muss ich
das mit PHP lösen ?

beste gruesse,
martin hein

  1. ich habe ein verschachteltes Select-Statement geschrieben.

    Kannst Du den SQL-Code mal hier posten, auf den ersten Blick sieht der Code mega-beknackt aus. (dreifacher Selbst-JOIn und wraum überhaupt? Alles frisch in der Tüte? :)

    1. ???

      Der SQL-CODE steht doch in der Fehlermeldung.

      Ich versuche mal zu beschreiben, was ich realisieren will.

      Hier mein Ergebnissatz richtig sortiert:

      site_id link_title  d1 d2 d3
      3 Unsere Leistungen 1 0 0
      7 Zähne   1 4 0
      99 Zahnvorsorge  1 4 3

      Bekannt ist site_id = 99 und ich suche nach dem Datensatz,

      1. bei dem d1 und d2 gleich und d3=0 ist.
      2. bei dem d1 gleich, d2=0 und d3=0 ist.

      beste gruesse,
      martin

      1. Der SQL-CODE steht doch in der Fehlermeldung.

        Soll der abgetippt werden, wie uncool.

        site_id link_title  d1 d2 d3
        3 Unsere Leistungen 1 0 0
        7 Zähne   1 4 0
        99 Zahnvorsorge  1 4 3

        Bekannt ist site_id = 99 und ich suche nach dem Datensatz,

        1. bei dem d1 und d2 gleich und d3=0 ist.
        2. bei dem d1 gleich, d2=0 und d3=0 ist.

        SELECT
         *         -- da darf auch etwas anderes stehen ;)
        FROM
         Table
        WHERE
         (site_id = 99) AND
         (
          (
           (d1 = d2) AND
           (d3 = 0)
          ) OR
          (
           (d1 = '') AND    -- siehe Frage unten
           (d2 = 0) AND
           (d3 = 0)
          )
         )

        Was heisst "bei dem d1 gleich,"?

        1. sorry, so weit, dass der abgetippt werden will,
          hab ich nicht gedacht.

          sorry, ich denk immer, die aufgabenstellung sei
          jedem anderen so klar, wie mir.
          das kann sie natürlich nicht sein ;)

          ich versuch's nochmal anders zu beschreiben:

          in jedem datensatz stehen immer die felder
          d1, d2, d3, site_title und site_id.

          ich habe eine site_id. mit der hole ich mir einen
          datensatz (WHERE site-id=99). nun will ich alle
          datensätze, bei denen d1 gleich dem ergebnisdatensatz
          ist, d2 und d3 aber 0 und bei denen d1 und d2 gleich
          dem ergebnisdatensatz, d3 aber 0 ist.

          site_id link_title        d1 d2 d3
          ------- ----------------- -- -- --
          3       Unsere Leistungen 1  0  0
          7       Zähne             1  4  0
          99      Zahnvorsorge      1  4  3

          Mit drei Select-Statements sähe das in etwa so aus:

          SELECT d1, d2, d3 ...
          WHERE
          site\_id = ".$site_id."
          => $d1, $d2, $d3

          SELECT site\_id ...
          WHERE d1 = ".$d1."
          AND d2 = ".$d2."
          AND d3 = ".$d3."
          => $site_id1 (ist überflüssig, weil diese site_id ist ja bekannt)

          SELECT site\_id ...
          WHERE d1 = ".$d1."
          AND d2 = ".$d2."
          AND d3 = 0
          => $site_id2

          SELECT site\_id ...
          WHERE d1 = ".$d1."
          AND d2 = 0
          AND d3 = 0
          => $site_id3

          ... und so ist es auch zur zeit gelöst.

          beste gruesse,
          martin

  2. Hello,

    ohne es mir im Einzelnen angeschaut zu haben, sollte die Verschachtelung durch einen Mehrfachjoin (genauer: mehrfachen Selfjoin) aufzulösen sein.

    MfG
    Rouven

    --
    -------------------
    He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve