所以,我正在编写一个应用程序来从数据库中获取记录,我的客户问我是否可以按区域对数据进行排序。我有以下查询:
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
的记录。这不会显示为列表中的第一条记录。这是为什么呢?我该如何解决这个问题?
谢谢
首先,将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
在表中是唯一的。 这很重要,因为这会使排序稳定。
查看 SELECT 查询文档:
https://dev.mysql.com/doc/refman/5.7/en/select.html
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
总之,只需limit
返回 x 条记录。有了偏移量,你可以设置一个起始位置,基本上允许你进行分页。
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 行开始