Witam
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)
Ten post edytował djlinux 9.08.2010, 09:42:38