对于我的项目,我有一个要求,我必须按降序显示除第一条记录之外的所有记录。我有点搞砸了。无论如何,我尝试过以下方法:
SELECT * FROM ins_nr nl WHERE nl.nl_status = '2' ORDER BY nl.nl_id DESC
在这里,我有一个名为ins_nr
的表格,它将显示所有记录status
2和id
是主键(唯一)。它以desc
顺序完美显示。
我不想单独从顶部开始的第一张唱片。我该怎么办?如何修改上面的查询..?
答案 0 :(得分:1)
Use OFFSET. Then you can skip 1 records and select the remaining ones until the end.
示例:
SELECT * FROM ins_nr nl WHERE nl.nl_status = '2'
ORDER BY nl.nl_id DESC LIMIT 99999999999 OFFSET 1;
OR(您也可以使用更短的语法来实现相同的结果:)
$sql = "SELECT * FROM table_name LIMIT 1, 999999999";
答案 1 :(得分:0)
您正在寻找offset
条款。这看起来像:
SELECT *
FROM ins_nr nl
WHERE nl.nl_status = '2'
ORDER BY nl.nl_id DESC
LIMIT 999999999 OFFET 1;
不幸的是,LIMIT
是必需的。对于这种情况,传统的做法就是增加数量。
此外,如果nl_status
是数字,则使用nl.nl_status = 2
。不要将字符串与数字进行比较。
答案 2 :(得分:0)
您可以生成动态rownum并对其进行过滤以省略第一行,例如:
SELECT *
FROM (
SELECT nl.*, @r := @r + 1 AS `rn`
FROM ins_nr nl, (SELECT @r := 0)
WHERE nl.nl_status = '2'
ORDER BY nl.nl_id DESC
) a
WHERE a.rn > 1;
答案 3 :(得分:0)
另一种方法是从子查询中获取max id并将其放在where clausole
中