Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 17
1

Выбор следующей и предыдущей

29.02.2016, 03:11. Показов 2637. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
pid int(1) UNSIGNED
cid int(11) UNSIGNED
sort int(11) UNSIGNED

Зная только pid и cid, как выбрать из БД следующую и предыдущую запись, относительно известной, НО не по pid или cid, а по sort?

Например
SQL
1
SELECT * FROM DATABASE WHERE pid=$pid AND cid=$cid AND sort>(что тут должно быть?) ORDER BY sort DESC LIMIT 1
Т.е. из $QUERY_STRING известно только $pid и $cid определенной записи, но нужно получить prev next относительно этой записи по sort, а не по pid или cid.

Повторяюсь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.02.2016, 03:11
Ответы с готовыми решениями:

Учет данных предыдущей строки в следующей
Помогите, пожалуйста, кто может. Надо на кнопку в форме посадить процедуру условия. Есть поле...

Реализация кнопки предыдущей и следующей картинки в галерее
Привет, хочу реализовать галерею. Структура бд такова: id | url | owner_id | date. Не подскажите,...

Создать кнопку перехода к следующей/предыдущей форме
Добрый день! Ситуация: Создано 10 форм, в которых есть по 2 кнопки - "назад" и "вперед". Напишите...

Работа с предыдущей и следующей строкой, после найденной
Приветствую всех, возникла такая проблема. Есть файл в котором записаны строки данных. Они...

8
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
29.02.2016, 07:24 2
T-SQL
1
2
3
4
SELECT * 
FROM DATABASE 
WHERE sort>(SELECT MAX(sort) FROM DATABASE WHERE pid=$pid AND cid=$cid) 
ORDER BY sort DESC LIMIT 1
Добавлено через 14 минут
Что за LIMIT не знаю и парсер SQL-Server 2008 что-то тоже не знает...
И сортировать нужно всё-таки по возрастанию наверное...
T-SQL
1
2
3
4
SELECT TOP 1 * 
FROM DATABASE 
WHERE sort>(SELECT MAX(sort) FROM DATABASE WHERE pid=$pid AND cid=$cid) 
ORDER BY sort ASC
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,794
29.02.2016, 09:17 3
если MS Sql (в чем сомневаюсь) - row_number()
0
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 17
29.02.2016, 13:44  [ТС] 4
Да, что-то я не там вопрос задал.
Это вопрос по MySQL. Можно перенести тему туда?

Добавлено через 4 минуты
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 *

Не работает. Вопрос все таки по MySQL. Наверно, Ваш ответ по SQL Server.

Добавлено через 2 минуты
SELECT * FROM catalog_links WHERE sort>(SELECT MAX(sort) FROM catalog_links WHERE pid=$pid AND cid=$id) ORDER BY sort LIMIT 1

А в таком виде отдает пустую строку.
0
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
29.02.2016, 14:29 5
Создал таблицу Tbl1 со следующими данными:

pid cid sort
1 1 10
2 2 9
3 3 8
4 4 7
5 5 6

Выполнил запрос
SQL
1
2
3
4
SELECT * 
FROM Tbl1
WHERE sort>(SELECT MAX(sort) FROM Tbl1 WHERE pid=3 AND cid=3) 
ORDER BY sort ASC LIMIT 1
Он работает. А вот имя DATABASE в MySQL зарезервировано. Использовать его в качестве имени таблицы/столбца - не есть гуд. Как указать, что это имя таблицы пока не знаю, но в любом случае рекомендую имя таблицы изменить, если это возможно.
0
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 17
29.02.2016, 14:36  [ТС] 6
Дополнение. Нужно выбрать следующую запись по sort, но чтобы pid совпадали. Т.е. уникальным остается только cid.

Добавлено через 7 минут
Ваш ответ работает. Можно его чуть-чуть улучшить? Нужно чтобы следующая запись по sort имела тот же pid. Уникальным в этой таблице остается только cid.
0
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
29.02.2016, 14:36 7
Лучший ответ Сообщение было отмечено november_night как решение

Решение

Немного меняем запрос:

SQL
1
2
3
4
SELECT * 
FROM Tbl1
WHERE pid=3 AND sort>(SELECT MAX(sort) FROM Tbl1 WHERE pid=3 AND cid=3) 
ORDER BY sort ASC LIMIT 1
0
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
29.02.2016, 14:40 8
Можно. Я написал.
0
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 17
29.02.2016, 16:28  [ТС] 9
Огромное спасибо! Работает!

Добавлено через 29 минут
Можете мне еще чуть-чуть помочь
Суть такая, Ваш запрос работает, но мне нужно, чтобы это запрос проверялся еще и в другой таблице.
SQL
1
SELECT * FROM catalog, catalog_links WHERE id=$id AND hidden=0 AND  pid=$pid AND  sort<(SELECT MAX(sort) FROM catalog_links WHERE pid=$pid AND cid=$id) ORDER BY sort DESC LIMIT 1
Т.е. из другой таблицы нужно, чтобы id=$id и hidden=0. Если hidden=1 в catalog, нужно взять следующий по sort элемент из catalog_links, у которого совпадают pid и cid и hidden=0 из catalog. Дурдом какой-то.

Наверно, это уже сложно.
Изначально запись берется вот так:
SQL
1
SELECT c.* FROM catalog c, catalog_links cl WHERE c.hidden=0 AND cl.pid=$pid AND cl.cid=c.id AND c.id=$id
Я пытался взять следующую запись по sort из catalog_links.
Это вообще возможно так связать?

Структура БД досталась в наследство. Менять там что-то не могу.

Добавлено через 1 час 17 минут
SQL
1
SELECT * FROM catalog, catalog_links WHERE id=cid AND hidden=0 AND  pid=$pid AND  sort<(SELECT MAX(sort) FROM catalog_links WHERE pid=$pid AND cid=$id) ORDER BY sort DESC LIMIT 1
Сам сделал. Спасибо огромное, YakobsEA! Вы очень помогли!
0
29.02.2016, 16:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.02.2016, 16:28
Помогаю со студенческими работами здесь

Visio печатает куски следующей страницы на предыдущей
Как это убрать?

Выполнение следующей команды только после завершения предыдущей
Здравствуйте. При выполнении команд &quot;start winrar&quot;, &quot;copy&quot;, &quot;del&quot; в bat файле происходит следующее:...

Освобождение консоли для выполнения следующей команды без останова предыдущей
Приветствую всех! Собственно сабж. Имеется стенд из четырех серваков. На сиим стенде...

Удалить строки по критериям из предыдущей или следующей строки
Приветствую! Нужен совет, как можно удалить все строки кроме тех, у которых значение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru