Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка "соседних" записей. 
:(
    Опции темы
Opik
Дата 17.2.2005, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Значит получаю запись через идентификатор ид.
тут ок, проблем нет. Но мне нужен получить так же ид предыдущей и следующей записи. Ид идет не обязательно по порядку... Не хочу изобретать велосипед, может что подстажите разумное?
PM MAIL Skype   Вверх
Song
Дата 17.2.2005, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: -1
Всего: 4



соседний выше
SQL
SELECT * FROM Tbl WHERE id > $id ORDER BY id LIMIT 1


соседний ниже
SQL
SELECT * FROM Tbl WHERE id < $id ORDER BY id DESC LIMIT 1


Это сообщение отредактировал(а) Song - 17.2.2005, 08:55


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
IZ@TOP
Дата 17.2.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Opr, можно попробовать более извращенным способом:

Код

select t1.*, t2.*, t3.* from test_table as t1,  test_table t2, test_table as t3
 where t1.id = 89 and t2.id < t1.id and t3.id > t1.id
 order by t2.id desc, t3.id asc limit 1

Думаю что тебе будет ясно что здесь к чему smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Opik
Дата 17.2.2005, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Угу пасип, сделал так:
Код
SELECT p. * , p2.id AS nextId, p3.id AS prevId, c.name AS categoryName
FROM `my_photo` AS p
LEFT JOIN `my_category` AS c ON ( c.id = p.category )
LEFT JOIN `my_photo` AS p2 ON ( p.id < p2.id )
LEFT JOIN `my_photo` AS p3 ON ( p.id > p3.id )
WHERE p.id = '1'
AND p2.category = p.category
AND p3.category = p.category
GROUP BY p.id
LIMIT 1

smile

Это сообщение отредактировал(а) Opr - 17.2.2005, 11:34
PM MAIL Skype   Вверх
Opik
Дата 17.2.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



блин, он так не хочет выдерать первую и последнюю запись smile
PM MAIL Skype   Вверх
Akina
Дата 17.2.2005, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Opr
В реляционных базах понятия порядка записей в базе не существует, и пытаться его использовать - безграмотно. Порядок определяется сортировкой в запросе.
Если тебе позарез нужно именно поддержание порядка внесения записей в базу или там последней корректировки - изволь в отдельном поле хранить timestamp и работать с ним.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Opik
Дата 17.2.2005, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Думаю ясно, что мне нужно выбрать рядомстоящий ID, по признаку одной категории, второй же признак тот, что этот ID должен быть:
а) больше текущего
б) меньше.

Добавлено @ 11:54
Если убрать
Цитата
AND p2.category = p.category
AND p3.category = p.category

то работает выборка первой и последней фотки...но нет критерия "одной категории"...
PM MAIL Skype   Вверх
Opik
Дата 17.2.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



короч косяков у меня дофига в запросе.
PM MAIL Skype   Вверх
IZ@TOP
Дата 17.2.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Opr, воть вариант попроще:
Код
select t.id from test_table as t left join test_table as b on(b.id < 89)
  where t.id >= b.id order by b.id desc, t.id limit 3


Получаем табло след. вида:
Цитата
Array(
[0] = 88,
[1] = 89,
[2] = 90
)



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.