所以,我正在编写一个应用程序来从数据库中获取记录,我的客户端询问我是否可以按区域对数据进行排序。我有以下问题:
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
的记录。这不会显示为列表中的第一条记录。为什么是这样?我该如何解决这个问题?
由于
答案 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行