我有一个表单来编辑mysql表列。我可以点击链接并加载上一行,下一行,第一行或最后一行。我可以订购列(最多可订购四列)。所以,当我按Prev。或者接下来,必须首先订购列,然后我才能得到结果。我为此使用mysql View。重要的是要知道列是文本,但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
但这没有结果。
编辑:
我尝试为实际行ID为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`))
和
(x。typ
&lt; y。typ
或
(x。typ
= y。typ
和x。id
&lt; y。id
)或
(x。typ
= y。typ
和y。id
= 1 AND x。id
&gt; y。id
))
和
(x。diff
&lt; y。diff
或
(x。diff
= y。diff
和x。id
&lt; y。id
)或
(x。diff
= y。diff
和y。id
= 1 AND x。id
&gt; y。id
))
在哪里。id
= 1
ORDER BY x。cat
DESC,x。typ
DESC,x。diff
DESC,x。id
DESC LIMIT 0,1
这会查找上一行。行为有点奇怪,但有效。所以当我去最后一个值时,我得到id = 1。然后,当我按Previous(此查询)时,它会转到id = 82,当我再次按下上一个id = 81,依此类推,直到我得到id = 2。只有当我按/选择最后一个时,我才能达到id = 1。
答案 0 :(得分:0)
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))
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))
WHERE y.id = 1
ORDER BY x.cat DESC , x.typ DESC , x.diff DESC , x.id DESC
LIMIT 1 OFFSET 0
我在这个查询中看到的问题是id不能小于1
所以x.id < y.id
永远都是假的
这只留下
....
ON (x.cat < y.cat)
AND (x.typ < y.typ)
AND (x.diff < y.diff)
作为加入标准。