Выборка из базы по алфавиту

Анатолий 1984

Новичок
Добрый день. Есть таблица

table_fruits_vegetables

id name
1 огурец
2 помидор
3 тыква
4 ананас
5 морковь
6 слива
7 кабачок
8 арбуз
9 манго
10 капуста


В алфавитном порядке они будут

ананас
арбуз
кабачок
капуста
манго
морковь
огурец
помидор
слива
тыква


К примеру если мы зайдем в пункт меню с id = 5(морковь) я бы хотел вывести

капуста
манго
огурец
помидор

Т.е. если я захожу в какой то пункт меню я хотел бы вывести в отдельное меню 2 пункта сверху и 2 снизу (По алфавиту)

Как составить такой запрос, сильно не пинайте только начинаю разбираться со всем этим. Заранее спасибо.
 

Andkorol

Новичок
Зачем делать повторный запрос данных, которые уже получены для составления основного меню?
Используй для отдельного меню данные из основного меню.
Т.к. это массив – то, соответственно, для отдельного меню выбирай из этого же массива элементы с ключами в диапазоне от –2 до +2 относительно ключа выбранного элемента (морковь).
 
Последнее редактирование:

Анатолий 1984

Новичок
Я немного неправильно выразился, это не меню а теги, нет массива изначально. При нажатии по тегу(морковь) из адресной строки выдергиваю алиас(morkov) и уже по нему нахожу в таблице его id(5).
Потом к примеру делаю запрос
select * FROM table_fruits_vegetables ORDER BY name ASC

Что дописать к этому запросу чтобы к примеру зная id = 5 получить теги которые находятся рядом, после сортировки т.е.

капуста
манго
огурец
помидор
 

Andkorol

Новичок
А, ну тут как-то так можно попробовать:
PHP:
(select * from `fruits` where `name` < 'морковь' order by `name` desc limit 2)
union
(select * from `fruits` where `name` > 'морковь' order by `name` asc limit 2)
order by `name` asc;
Результат:
Код:
+----+----------------+
| id | name           |
+----+----------------+
| 10 | капуста        |
|  9 | манго          |
|  1 | огурец         |
|  2 | помидор        |
+----+----------------+
 

fixxxer

К.О.
Партнер клуба
Проще выбрать все подряд и вытащить из массива. У тебя же там наверняка немного данных.

Если много, то в mysql придется крайне дико извращаться через юнионы, в базах данных посерьезнее можно менее дико извратиться через window functions и любой аналог row_number.
 

Анатолий 1984

Новичок
А, ну тут как-то так можно попробовать:
PHP:
(select * from `fruits` where `name` < 'морковь' order by `name` desc limit 2)
union
(select * from `fruits` where `name` > 'морковь' order by `name` asc limit 2)
order by `name` asc;
Результат:
Код:
+----+----------------+
| id | name           |
+----+----------------+
| 10 | капуста        |
|  9 | манго          |
|  1 | огурец         |
|  2 | помидор        |
+----+----------------+
Спасибо, сделал уже точно также !
 
Сверху