Raffi: MySQL Abfrage

Hallo Leute

Ich habe eine Datenbank mit Bildern drin. Jedes Bild hat eine ID. Die IDs sind fortlaufend. z.B. 1-8.

Nun müsste ich folgende Abfrage generieren. Wenn dem PHP Script die ID=3 mitgegeben wird, müsste er die Daten aus der DB wie folgt holen:

3
2
1
8
7
5
4
3
2
1

Einfach das die mitgegebene ID zu oberst ist, und dann einfach absteigend sortiert wird, danach jedoch noch der "Rest" auch noch absteigend sortiert angehängt wird.

Gruss
Raffi

  1. Ich kenn mySQL selbst nicht, aus SQL-Sicht allgemein würde ich evtl. zu einer UNION-Abfrage tendieren

    SELECT '1' AS kennung, * FROM MyTable WHERE ID<3 UNION SELECT '2'  AS kennung, * FROM MyTable;

    Weiss nicht ob das syntaktisch so korrekt ist, nur als Tipp in welcher Richtung man da was machen könnte...

    1. Ach ja, ORDER BY hatte ich vergessen :
      SELECT '1' AS kennung, * FROM MyTable WHERE ID<3 UNION SELECT '2'  AS kennung, * FROM MyTable ORDER BY kennung, ID DESC;

  2. Hallo!

    Nun müsste ich folgende Abfrage generieren. Wenn dem PHP Script die ID=3 mitgegeben wird, müsste er die Daten aus der DB wie folgt holen:

    3
    2
    1
    8
    7
    5
    4
    3
    2
    1

    Das kannst Du über ein SQL-Statment nicht lösen. Du wirst Dir alle Daten in ein Array holen müßem, und es applikationsseitig lösen müßen.

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Und wie müsste ich das konkret machen?

      Wie ich alle in ein Array bring ist mir eigentlich klar...aber wie kann ich das dann so sortieren wie ich es brauche?

      1. Hallo!

        Wie ich alle in ein Array bring ist mir eigentlich klar...aber wie kann ich das dann so sortieren wie ich es brauche?

        Du holst Dir erst einmal alle Datensätze absteigend aus der Tabelle.

        SELECT spalten FROM tabelle ORDER BY foto_id DESC;

        Du baust eine mehrdimensionalle Array auf. Dadurch, daß Du schon die Datensätze absteigend aus der Datenbank geholt hast, mußt Du das Array nicht mehr absteigend sortieren.

        $tabelle[] = array(DB_FOTO_ID, SPALTE_1, SPALTE_n); // pro Datensatz

        Die Ausgabe sollte dann so aussehen.

        $foto_id = 3;
        while(list($key, $inneres_array) = each($tabelle))
           {
              list($db_foto_id, $spalte_1, $spalte_n) = $inneres_array;

        if($db_foto_id<=$foto_id)
                   {
                     $ausgabe_teil .= $db_foto_id . "<br>" ;
                   }

        $ausgabe_komplet .= $db_foto_id . "<br>" ;
        }

        echo $ausgabe_teil; // von 3 bis 1
        echo $ausgabe_komplet; // alles absteigend (8 bis 1)

        MfG, André Laugks

        --
        L-Andre @ gmx.de