Posłużę się przykładem, posiadam taką tabelkę:
mysql> SELECT * FROM photos; +----+---------+----------+ | id | content | sequence | +----+---------+----------+ | 1 | #1 | 1 | | 2 | #2 | 4 | | 3 | #3 | 7 | | 4 | #4 | 11 | | 5 | #5 | 32 | +----+---------+----------+ 5 rows IN SET (0.00 sec)
Za cel stawiam sobie odczytanie sąsiednich wierszy (sąsiednich względem wartości pola sequence) powiedzmy dla id=3 (oczywiście przy założeniu, że id mogą być "nie po kolei").
Chciałbym poprosić o sprawdzenie, a może podpowiedzenie innego efektywniejszego sposobu na osiągnięcie mojego celu. Mój dotychczasowy rezultat:
mysql> (SELECT * FROM photos WHERE sequence < (SELECT sequence FROM photos WHERE id=3) ORDER BY sequence DESC LIMIT 1) UNION -> (SELECT * FROM photos WHERE sequence > (SELECT sequence FROM photos WHERE id=3) ORDER BY sequence ASC LIMIT 1); +----+---------+----------+ | id | content | sequence | +----+---------+----------+ | 2 | #2 | 4 | | 4 | #4 | 11 | +----+---------+----------+ 2 rows IN SET (0.00 sec)
Struktura tabeli w razie potrzeby, stworzona tylko w celu przetestowania idei opisanej wyżej.
mysql> SHOW CREATE TABLE PHOTOS; +--------+------------------------------------------------- | TABLE | CREATE TABLE +--------+------------------------------------------------- | PHOTOS | CREATE TABLE `photos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(20) NOT NULL, `sequence` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 | +--------+------------------------------------------------- 1 row IN SET (0.00 sec)