powerbook_blog

klein, praktisch, unverdaulich seit 2004

MySQL: Treffer in einer vorgegebenen Reihenfolge

| Keine Kommentare

Vermutlich braucht das ausser mir eh kein Mensch. Aber ich brauche es unter Garantie immer mal wieder und dann erinnere ich mich vielleicht an diesen Beitrag hier.

Ich hatte den Fall, dass ich die Trefferliste, die mir die MySQL-Datenbank geliefert hat, in einer ganz bestimmten Reihenfolge gebraucht habe. Das kann man mit order by field(fieldname, fieldvalue1, fieldvalue2, ... ) erzwingen.

Wenn man also 3 Tabellen hat:

Tabelle 1: id ( int ), val (varchar)
Tabelle 2: id ( int ), t1_id (int), val2 (varchar)
Tabelle 3: id ( int ), t1_id (int), val3 (varchar)

und man möchte nach val2 und val3 sortieren, kann aber aus Performance- oder anderen Gründen die Tabellen nicht mit einem JOIN verknüpfen, dann bietet sich folgender Workaround an:

$array1 = $m->q("SELECT id FROM t1 WHERE id IN ( 3,7,2,6 ) ORDER BY FIELD (id, 3,7,2,6) ");
$array2 = $m->q("SELECT val2 FROM t2 WHERE id IN ( 3,7,2,6 ) ORDER BY FIELD (t1_id, 3,7,2,6) ");
$array2 = $m->q("SELECT val3 FROM t3 WHERE id IN ( 3,7,2,6 ) ORDER BY FIELD (t1_id, 3,7,2,6) ");
array_multisort($array2,$array3,$array1);

Mag sich völlig wirr anhören. Ist es vermutlich auch, aber mir hat es geholfen.

Schreib einen Kommentar

Pflichtfelder sind mit * markiert.