Komplizierte MySQL-Abfrage



  • Hallo,
    ich brauche Hilfe bei einer komplizierten MySQL-Abfrage. Dabei weiß ich noch nicht mal, ob soetwas überhaupt möglich ist.

    Um folgende Tabelle geht es:

    ----------------------------
    | ID1 | ID2 | ID3 | Nummer |
    ----------------------------

    Meine Abfrage soll erst in der ID1 nach dem Wert 1 suchen. Wenn er dort keine Zeile findet soll er nach ID1=6 suchen und wenn er den auch nicht findet, soll er nach der ID1=2 suchen.
    Dann soll die Abfrage in der ID2 nach 1 suchen. Wenn er keine findet, wieder nach 6 und dann nach 2. Das gleiche mit ID3.
    Das alles will ich möglichst in eine Abfrage packen:

    SELECT * FROM tabelle WHERE
    ID1=1 [WENN KEIN DATENSATZ MIT ID1=1] ID1=6 [WENN KEIN DATENSATZ MIT ID1=1 ODER ID1=6] ID1=2 AND
    ID2=1 [WENN KEIN DATENSATZ MIT ID2=1] ID2=6 [WENN KEIN DATENSATZ MIT ID2=1 ODER ID2=6] ID2=2 AND
    ID3=1 [WENN KEIN DATENSATZ MIT ID3=1] ID3=6 [WENN KEIN DATENSATZ MIT ID3=1 ODER ID3=6] ID3=2

    Vieleicht kann mir ja jemand weiter helfen.



  • Verbinde doch mehrere SELECTs via UNION und setze für jedes SELECT eine Priorität, nach der anschließend sortiert wird.

    SELECT nummer, prioritaet=1
    FROM tabelle 
    WHERE ID1=1  
    UNION
    SELECT nummer, prioritaet=2
    FROM tabelle 
    WHERE ID1=6
    UNION
    SELECT nummer, prioritaet=3
    FROM tabelle 
    WHERE ID1=2
    ...
    ORDER BY prioritaet
    

    Du musst nun nur noch eine Beschränkung auf den ersten Datensatz (falls notwendig) einbauen.



  • select * from tabelle where
    (id1=1 or id1=6 or id1=2) or (id2=1 or id2=6 or id2=2) or (id3=1 or id3=6 or id3=2);

    das or zwischen den klammern muss sein, da du ja z.b. auch alle datensätze von id2 willst, auch wenn er zu id1 nichts findet. es darf keine abhängigkeiten zwischen den id´s geben. schreibe das nur, weil du in deiner beispielabfrage AND benutzt hast. vorraussetzung: ich habe dein problem richtig verstanden. 🙂


Log in to reply