SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.10.2008 23:27:01

serjinio
Завсегдатай
Зарегистрирован: 10.07.2008
Сообщений: 30

Как выбрать три последователных позиции(поля)

таблица MySQL  ,где ID авто инкремент,первичный ключ и NAME имя товара
ID     NAME
1       один
14     два
7       три
11     четыре
12     пять
111   шесть
172   семь

как сделать вывод трех последовательных полей
если.....
выбираем Id 1     (позиция:1) выводим : семь шесть пять
выбираем Id 14   (позиция:2) выводим : один семь шесть
выбираем Id 7     (позиция:3) выводим : один два семь
выбираем Id 11   (позиция:4) выводим: три два один
выбираем Id 12   (позиция:5) выводим: четыре три два
выбираем Id 111 (позиция:6) выводим: пять четыре три
выбираем Id 172 (позиция:7) выводим: шесть пять четыре
...............
выбираем Id 1   (позиция:1) выводим: семь шесть пять
выбираем Id 14 (позиция:2) выводим : один семь шесть
........и т.д по кругу....(закольцевать массив)

передаем ID GETом
$id=intval($_GET['id'])
те если мы выбираем позицию товара Id 11 то надо вывести три предыдущие до него позиции товаров т.е Id 7 (позиция:3),Id 14 (позиция:2), Id 1(позиция:1)

или можно (если это сделать легче) то выбирать следующие за ним три позиции
выбираем Id 1     (позиция:1) выводим : два три четыре
выбираем Id 14   (позиция:2) выводим : три четыре пять
выбираем Id 7     (позиция:3) выводим : четыре пять шесть
выбираем Id 11   (позиция:4) выводим:  пять шесть семь
выбираем Id 12   (позиция:5) выводим:  шесть семь один
выбираем Id 111 (позиция:6) выводим:  семь один два
выбираем Id 172 (позиция:7) выводим:  один два три
...............
выбираем Id 1    (позиция:1) выводим:  два три четыре
выбираем Id 14  (позиция:2) выводим : три четыре пять......


позиция --это строка в таблице...
проблема в том что если использовать запрос

$res=mysql_query("SELECT id,name FROM `test` LIMIT $start, 3 ", $db);

где $start=6,
то выведется только одна позиция Id 172 (позиция:7)семь,а надо чтобы выводилось---семь один два

третий день мучаюсь,уже мозг сломал,не знаю как закольцевать выборку...прошу помощи..Заранее спасибо.

Неактивен

 

#2 15.10.2008 19:17:21

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как выбрать три последователных позиции(поля)

Никогда нельзя полагаться на номер строки в БД. База не гарантирует, что если
Вы дважды сделаете одну и ту же выборку с одинаковыми данными без явного
указания сортировки, Вы получите одинаковую последовательность строк.

Если нужно положение - его нужно ввести явно в таблицу и сортировать по нему.

Неактивен

 

#3 15.10.2008 23:16:30

serjinio
Завсегдатай
Зарегистрирован: 10.07.2008
Сообщений: 30

Re: Как выбрать три последователных позиции(поля)

Тогда посоветуйте какой ввести столбец ,чтобы решить такую задачу,может ввести сортировку по времени занесения в БД?

Неактивен

 

#4 16.10.2008 02:31:16

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как выбрать три последователных позиции(поля)

Можно и время занесения. В принципе, если у Вас есть автоинкрементное поле - то оно
и будет "в порядке занесения". Но тогда Ваш пример отсортирован плохо.

Неактивен

 

#5 16.10.2008 09:40:22

serjinio
Завсегдатай
Зарегистрирован: 10.07.2008
Сообщений: 30

Re: Как выбрать три последователных позиции(поля)

А вобще,реально ли сделать сортировку в автоинрементном поле,те чтобы в столбце значения ID шли по порядку?

Неактивен

 

#6 17.10.2008 15:08:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как выбрать три последователных позиции(поля)

Конечно.

SELECT * FROM tablename ORDER BY id;

Неактивен

 

#7 17.10.2008 21:16:24

serjinio
Завсегдатай
Зарегистрирован: 10.07.2008
Сообщений: 30

Re: Как выбрать три последователных позиции(поля)

но это выборка,а переписать таблицу реально ли?

Неактивен

 

#8 20.10.2008 13:02:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как выбрать три последователных позиции(поля)

Переписать таблицу - как? Данные в таблице все равно будут перемешиваться в процессе работы.
Все равно один и тот же запрос может возвращать данные в разном порядке, если в явном виде
не указана сортировка. Все равно сортировать прийдется smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson