MySQL - 按整数排序时获取更多记录

时间:2017-01-23 12:26:50

标签: php mysql

所以,我正在编写一个应用程序来从数据库中获取记录,我的客户端询问我是否可以按区域对数据进行排序。我有以下问题:

SELECT 
    *
FROM
    customers
WHERE 
    account_type != 'x'
AND 
    account_type != 'tor'
ORDER BY 
    area ASC,
    id ASC 
LIMIT 30

查询返回30行数据,所有数据的区域值均为1

我有一个AJAX查询设置来获取另外30行,但是当我按区域排序数据时,我无法在我的查询中插入一个简单的范围字符串,如下例所示:

...
AND
    id > 30
...

我如何编写一个从数据库中收集下30条记录的查询?

此外,还有一个区域值为0的记录。这不会显示为列表中的第一条记录。为什么是这样?我该如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:1)

首先,将where条件合并为一个not in

SELECT c.*
FROM customers c
WHERE account_type NOT IN ('x', 'tor')
ORDER BY area ASC, id ASC 
LIMIT 30;

然后,对于下一组,请使用:

SELECT . . .
OFFSET 30
LIMIT 30

这假设id在表中是唯一的。这很重要,因为这样可以使排序稳定。

答案 1 :(得分:1)

查看SELECT查询文档:

https://dev.mysql.com/doc/refman/5.7/en/select.html

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

总之,只需limit即可返回x条记录。使用偏移量,您可以设置起始位置,基本上允许您进行分页。

答案 2 :(得分:1)

MySQL LIMIT采用可选参数偏移量,因此您可以在选择所需的30个结果时发送一个参数,告知从哪里开始

SELECT 
    *
FROM
    customers
WHERE 
    account_type != 'x'
AND 
    account_type != 'tor'
ORDER BY 
    area ASC,
    id ASC 
LIMIT 30, 30

应该从第30行开始给你接下来的30行