2017-06-24 82 views
1

对于我的项目,我有一个要求,即必须以降序显示除第一条记录以外的所有记录。我有点混乱。不管怎么说,我曾尝试以下:查询以显示除初始记录以外的记录

SELECT * FROM ins_nr nl WHERE nl.nl_status = '2' ORDER BY nl.nl_id DESC 

这里,i有一个表称为ins_nr这将显示所有与status 2和id哪个是主键(唯一)的记录。完全显示在desc的顺序。

我不想单独从顶部的第一条记录。我该怎么办?如何修改上面的查询..?

+0

应该如何在第一个记录得到整理呢? –

+0

OFFSET 1 LIMIT 1 QUADRILLION – Strawberry

+0

@DarshanMehta,我不知道,最新记录/我的项目不需要第一个记录 – Keynes

回答

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"; 
+0

'附近使用的正确语法。对于上述查询,如何通过给出'OFFSET' – Keynes

+0

@Keynes来省略最后一个。您试试这个吗? –

+1

@凯恩斯..对于参考阅读本:https://www.w3schools.com/php/php_mysql_select_limit.asp –

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。不要将字符串与数字进行比较。

+0

错误代码:1064 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以找到在'OFFSET 1 – Keynes

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; 
0

另一种方式是从子查询中获得最大的ID,并把它在一个地方clausole