У меня есть форма для редактирования столбцов таблицы MySQL. Есть ссылки, по которым я могу перейти и загрузить строку «Предыдущая», «Следующая», «Первая» или «Последняя». Я могу заказать столбцы (макс. Четыре столбца для заказа). Поэтому, когда я нажимаю Prev. или Далее, столбцы должны быть упорядочены в первую очередь, а затем я могу получить результат. Я использую MySQL для этого. Важно знать, что столбцы - это текст, а id - это номер. Я обычно заказываю по первым текстовым столбцам, а затем по id.
А вот мой запрос, который сработал для меня при заказе по одному столбцу.
Предыдущая:
SELECT x.*
FROM test_view x, test_view y
WHERE y.`id` = 13
AND ( x.`cat` < y.`cat` OR ( x.`cat` = y.`cat` AND x.`id` < y.`id`))
ORDER BY x.`cat`, x.`id` DESC
LIMIT 0,1
Далее:
SELECT x.*
FROM test_view x, test_view y
WHERE y.`id` = 13
AND (x.`cat` > y.`cat` OR (x.`cat` = y.`cat` AND x.`id` > y.`id`))
ORDER BY x.`cat`, x.`id` ASC
LIMIT 0,1
Я попытался расширить это, чтобы найти несколько столбцов, как это:
SELECT x . *
FROM ukazka_view x, ukazka_view y
WHERE y.`id` =1
AND (
x.`cat` < y.`cat`
OR (
x.`cat` = y.`cat`
AND x.`id` < y.`id`
)
)
AND (
x.`typ` < y.`typ`
OR (
x.`typ` = y.`typ`
AND x.`id` < y.`id`
)
)
AND (
x.`diff` < y.`diff`
OR (
x.`diff` = y.`diff`
AND x.`id` < y.`id`
)
)
ORDER BY x.`cat` DESC , x.`typ` DESC , x.`diff` DESC , x.`id` DESC
LIMIT 0 , 1
Но это не дает результатов.
Отредактировано:
Я пытался написать запрос для случая, когда фактический идентификатор строки равен 1.
SELECT x.* FROM ukazka_view x INNER JOIN ukazka_view y ON
( x.`cat` < y.`cat` OR
( x.`cat` = y.`cat` AND x.`id` < y.`id`) OR
( x.`cat` = y.`cat` AND y.`id` = 1 AND x.`id` > y.`id`))
И
(х. typ
<у. <code>typ ИЛИ
(х. typ
= у. typ
И х. id
<у. <code>id) ИЛИ
(х. typ
= у. typ
И у. id
= 1 И х. id
> у. id
))
А ТАКЖЕ
(х. diff
<у. <code>diff ИЛИ
(х. diff
= у. diff
И х. id
<у. <code>id) ИЛИ
(х. diff
= у. diff
И у. id
= 1 И х. id
> у. id
))
ГДЕ у. id
= 1
ЗАКАЗАТЬ ПО Х. cat
DESC, Х. typ
DESC, Х. diff
DESC, Х. id
DESC LIMIT 0,1
Это выглядит для предыдущего ряда. Поведение немного странно, но работает. Поэтому, когда я перехожу к последнему значению, я получаю id = 1. Затем, когда я нажимаю Previous (этот запрос), он получает id = 82, когда я снова нажимаю Previous id = 81 и так далее, пока я не получу id = 2. Я не могу получить id = 1, только когда нажимаю / выбираю Last.