FraFu: mysql order by

Hallo!

Folgendes Problem:

Tabelle:
artikel
  artikel_id - primarykey, autoincrement

Ich habe eine Funktion getTable($res) die ein MySQL Resultset ($res) als Parameter bekommt und das Resultset abbarbeitet und damit eine Tabelle aufbaut.

Ich habe eine weitere Funktion getResult($ids) das ein Array von artikel-ids bekommt, mit denen die Tabelle aufgebaut werden soll.

zb getResult(array(1,4,5)) würde folgende Query absetzen:

  
SELECT artikel_id, .... FROM artikel where artikel_id=1 OR artikel_id=4 OR artikel_id=5  

das Resultset wird dann zurückgegeben und weiter an getTable() übergeben.

1. Frage: Kann man diese SQL Query besser lösen? Gibts da nicht einen IN Operator oder so? In der MySQL Doku finde ich leider keine genaue Beschreibung der Where Klausel. zb WHERE artikel_id IN (1,4,5) oder so.

Jetzt habe ich aber ein Problem. Ich möchte getResult(4,5,1) aufrufen und die Records sollen in genau dieser Reihenfolge kommen, damit sie auch in dieser Reihenfolge in der Tabelle stehen. Da ich keine ORDER BY Klausel angebe, kommen sie aber in der Reihenfolge, in der sie eingegeben wurden. Dh. 1,4,5. Ich möchte aber, dass sie in der Reihenfolge 4,5,1 kommen.

Hat jemand eine Idee, wie ich eine ORDER BY Klausel so gestalte, dass meine Anforderung erfüllt ist? Dh. Die Ordnung wäre ja von mir mit einer Liste festgelegt, die nichts mit der Abbildung in der Datenbank zu tun hat.

mfg
  frafu

  1. Hallo!

    Ich habe eine Funktion getTable($res) die ein MySQL Resultset ($res) als Parameter bekommt und das Resultset abbarbeitet und damit eine Tabelle aufbaut.

    Hier handelt es sich um PHP Funktionen.

    mfg
      frafu

    1. Hi,

      SELECT * FROM tabelle WHERE id IN (4,5,1) sollte doch funktionieren. Kommen die Ergebnisse hier vielleicht schon vorsortiert raus wenn du ORDER BY weglässt?

      Gruß
      Joah.

  2. Hallo,

    Tabelle:
    artikel
      artikel_id - primarykey, autoincrement

    zb getResult(array(1,4,5)) würde folgende Query absetzen:

    SELECT artikel_id, .... FROM artikel where artikel_id=1 OR artikel_id=4 OR artikel_id=5

    
    > das Resultset wird dann zurückgegeben und weiter an getTable() übergeben.  
    >   
    > 1. Frage: Kann man diese SQL Query besser lösen? Gibts da nicht einen IN Operator oder so? In der MySQL Doku finde ich leider keine genaue Beschreibung der Where Klausel. zb WHERE artikel\_id IN (1,4,5) oder so.  
      
    <http://dev.mysql.com/doc/refman/4.1/en/comparison-operators.html>  
    
    >   
    >   
    > Jetzt habe ich aber ein Problem. Ich möchte getResult(4,5,1) aufrufen und die Records sollen in genau dieser Reihenfolge kommen, damit sie auch in dieser Reihenfolge in der Tabelle stehen. Da ich keine ORDER BY Klausel angebe, kommen sie aber in der Reihenfolge, in der sie eingegeben wurden. Dh. 1,4,5. Ich möchte aber, dass sie in der Reihenfolge 4,5,1 kommen.  
      
    <http://aktuell.de.selfhtml.org/tippstricks/datenbanken/sqlsort/index.htm>  
      
    <http://dev.mysql.com/doc/refman/5.0/en/string-functions.html>  
      
    viele Grüße  
      
    Axel  
    
    
    1. Hallo!

      http://aktuell.de.selfhtml.org/tippstricks/datenbanken/sqlsort/index.htm

      Danke! Damit hab ichs lösen können.

      Jetzt hab ich aber eine halbe Stunde einen Fehler gesucht. Und zwar hab ich geschrieben:
      SELECT FIELD (article_id, 1, 2, 3) .....
      Der Blank zwischen FIELD und ( beschert einem einen hübschen SQL Error mit einer nichtssagenden Fehlermeldung.
      Führe ich dasselbe aber mit phpmyadmin aus, dann funktioniert die Abfrage! phpmyadmin dürfte den Querystring offenbar formatieren.

      mfg
        frafu