undso: Order By

Hallo Forum,
ich habe eine Query mit der Bedingung am Ende:

where B.id="+meineID+" OR  B.id="+freundID+"

meineID= 850
freundID= 870

Gibt also nur zwei Ergebnise/Datensätze. Kann man das nun so sortieren, dass er erst meinID und dann nach freundID sortiert?

Er sortiert das gerade immer nach der ID, obwohl ich nichts angegeben habe.

Grüßchen

  1. Du kommst mit zwei Abfragen, die per UNION-Operator verbunden werden, also z.B.:

    SELECT
     DF_1,
     DF_2
    FROM
     DT_1
    ORDER BY
     DF_1
    UNION SELECT
     DF_1,
     DF_2
    FROM
     DT_1
    WHERE
     (DF_1 = 2)

    (Wobei wir noch nicht alles verstanden haben, poste doch mal die ganze Query.)

    1. Hallöle,

      hier die komplette Query:

      select A.id, A.name, A.text, A.stark, A.schwach, A.partner1, A.partner2, B.username from pre_sternzeichen AS A INNER JOIN pre_user AS B ON A.id=B.sternzeichen where B.id="+meinID+" OR  B.id="freundID+" ;

      Grüßchen

  2. yo,

    Gibt also nur zwei Ergebnise/Datensätze. Kann man das nun so sortieren, dass er erst meinID und dann nach freundID sortiert?

    ja das kann man. es gibt dafür iner aller regel zwei möglichkeiten. entweder du hast innerhalb der daten ein kriterium zum sortieren. das ist der normalfall. in deinem falle hast du aber die gleiche spalte und auch nicht vorhersehbare inhalte. die sortierung ergibt sich bei dir also nur durch die programmlogik, nicht durch die datenhaltung. deshalb muss man ein wenig tricksen. eine möglichkeit wäre, eine pseudospalte zu erzeugen, entweder mir der if funktion oder der UNION klausel, wobei die if funktion oder eine andere flusssteuerung von deinem verwendeteten dbms abhängt. ich gehe mal von mysql aus.

    SELECT spalte1, spalte2.... IF(id = "+meineID+", 1, 0) AS Sortierung
    FROM tabelle
    where B.id="+meineID+" OR  B.id="+freundID+"
    ORDER BY Sortierung

    oder aber

    SELECT spalte1, spalte2, 1 AS Sortierung
    FROM tabelle
    where id="+meineID+"
    UNION ALL
    SELECT spalte1, spalte2, 0 AS Sortierung
    FROM tabelle
    where id="+freundID+"
    ORDER BY Sortierung

    Er sortiert das gerade immer nach der ID, obwohl ich nichts angegeben habe.

    das ist zufall, wie das dbms sortiert, wenn du keine angaben machst.

    Ilja

    1. Hallo Ilja,
      danke für die schnelle Antwort, habe diese Stelle leider nicht kapiert? 1, 0 ... ?

      IF(id = "+meineID+", 1, 0) AS Sortierung

      Für würde das konkret in meinem Beispiel aussehen?

      Grüße

      1. yo,

        Für würde das konkret in meinem Beispiel aussehen?

        select A.id, A.name, A.text, A.stark, A.schwach, A.partner1, A.partner2, B.username, IF(B.id = "+meineID+", 1, 0)  AS Sortierung
        from pre_sternzeichen AS A
        INNER JOIN pre_user AS B ON A.id=B.sternzeichen
        where B.id="+meinID+" OR  B.id="freundID+"
        ORDER BY Sortierung
        ;

        Ilja

        1. oh dankeschön,
          werde ich gleich mal probieren, da wäre ich nie und nimmer draufgekommen. danke für deine bemühungen.

          grüße

          1. yo,

            du müsstest noch ein DESC beim ORDER BY anfügen oder die Zahlen in der IF klausel umdrehen, also erst die 0 dann die 1. Dann sollte auch richtig sortiert werden. der teufel steckt wie immer im detail....

            Ilja