2010-12-16 6 views
7

Ich habe eine Abfrage nach Namen geordnet, die smt wie folgt zurück:Mysql Select Next & Prev Reihe nicht von id bestellen

ID  NAME 
2121927 AAA 
2123589 AAB 
2121050 AAC 
2463926 BBB ---> known ID 
2120595 CCC 
2122831 DDD 
2493055 EEE 
2123583 EEF 

Ich brauche die nächste ID und die i.Vj. ID kennen (falls vorhanden) bekannter ID & & NAME Wie ist es mit nur 1 Abfrage möglich?

+0

Sie es in 2 Abfragen tun können, finden Sie Blutzuckerwer le wie: http://stackoverflow.com/questions/1259458/sql-pulling-a-row-for-next-or-previous-row-of-a-current-row –

+0

@Haim, können Sie die beiden Abfragen beitreten zusammen mit einer Union, nicht wahr? –

Antwort

11
SELECT *, 
     'next' 
    FROM table 
    WHERE `name` > 'BBB' 
ORDER BY `name` 
    LIMIT 1 

UNION 

    SELECT *, 
     'previous' 
    FROM table 
    WHERE `name` < 'BBB' 
ORDER BY `name` DESC 
    LIMIT 1 

Wenn Sie nicht besonders BBBname Feldwert weiß es - Sie können es mit Unterabfrage wie SELECT name FROM table WHERE id = 42 ersetzen könnte, wo 42 die bekannte ist ID Wert.

+0

lol, sorry :) Ich hatte das korrekte Ergebnis mit der nächsten Zeile, die vorherige Zeile war die erste, weil ich von ASC nicht DESC bestellt habe. – Luca

+0

Was passiert, wenn Sie nach mehreren (und nicht eindeutigen) Spalten sortieren? –

+0

@ Matěj Koubík: Sie müssen eine weitere Spalte für die Konsistenz dann, Primärschlüssel zum Beispiel – zerkms

-4

Ich habe es so gemacht:
Es ist nicht die schnellste, aber es kümmert sich nicht um Reihenfolge der Felder.
Fragen Sie alle Zeilen von db ab, damit Sie das möchten.
Verwenden Sie php foreach, um die aktuelle ID zu finden.
Get Array-Index der aktuellen ID, machen Index +1 oder Index -1.

$current_id = 6;
$data = get_all_data_from_db();
foreach($data as $index=>$row) {
if($current_id == $row['id']) {
$next = $index+1;
$prev = $index-1;
}
$previous_row = $data[$prev];
$next_row = $data[$next];

+0

Ernsthaft? Eine 'foreach'? Wenn auf die angenommene Antwort gibt es eine schöne saubere Lösung mit einer "UNION" von zwei einfachen Abfragen. – Yaroslav

Verwandte Themen