MySQL 使用 LIMIT 返回第一条记录

标签 mysql limit

假设:

            $sql     = " SELECT * FROM `artwork` WHERE approved = '1' ";
if($filter) $sql    .= " AND $filter = '$filter_value' ";
            $sql    .= " ORDER BY subdate DESC, id DESC
                         LIMIT 30,30";

如果我要引入一个起点(例如 WHERE id > 50),并且该规定会影响我的 LIMIT,使其仅返回 10 个结果。请记住,我想要 30 个结果。有没有办法从记录1开始继续选择?

编辑:我意识到在这个例子中我要求 id > 50,而且如果我们要倒回,第一条记录肯定会具有较低的 ID。在我的场景中,这没问题。

谢谢,杰森。

最佳答案

If there are 100 records and you're only selecting 10 rows (#90 - #100), you want to get 20 more rows (#1 - #20)

如果这些是您的限制,我认为您将无法从单个查询中获得所需的结果集。

这是一个存储过程,它创建一个临时表以获得所需的结果:

DELIMITER //
DROP PROCEDURE IF EXISTS TMP_TABLE_ARTWORK//
CREATE PROCEDURE TMP_TABLE_ARTWORK (_offset INT, _count INT)
BEGIN
DECLARE res_total INT DEFAULT 0;
SELECT COUNT(*) INTO res_total FROM artwork;
CREATE TEMPORARY TABLE IF NOT EXISTS artwork_tmp ( t_pseudo INT, t_old INT, t_subdate DATETIME );
INSERT INTO artwork_tmp ( t_pseudo, t_old, t_subdate ) SELECT artwork.id, artwork.id, artwork.subdate FROM artwork ORDER BY artwork.subdate DESC;
INSERT INTO artwork_tmp ( t_pseudo, t_old, t_subdate ) SELECT ( artwork.id + res_total ), artwork.id, artwork.subdate FROM artwork ORDER BY artwork.subdate DESC;
PREPARE STMT FROM "SELECT * FROM artwork_tmp ORDER BY t_pseudo LIMIT ?,?";
SET @offset = _offset;
SET @count = _count;
EXECUTE STMT USING @offset, @count;
DROP TABLE artwork_tmp;
END //
DELIMITER ;

您可能需要修改它以使其执行您想要的操作(显然,如果您运行的是较新版本的 MySQL,则不再需要准备好的语句解决方法)。

关于MySQL 使用 LIMIT 返回第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939739/

相关文章:

php - Codeigniter Active Record - 计算总发现行数 (MySQL)

mysql - 按长度排序(城市) ASC 限制 1;在 MYSQL 中不显示第一项

php - 将对象添加到数组 - 覆盖而不是添加

PHP 和 MYSQL 对于 UPDATE/INSERT IF EXISTS,此 MySQL 语法是否正确

mysql - 查找一个表格单元格中的所有 substings_indexes

php - 如何将两种形式作为参数传递给 laravel Controller ?

mysql - 通过 SSH 以错误的顺序将文本粘贴到 Mysql

json.stringify 输出是 1023 个字符......为什么?

node.js - 避免对 busyboy 文件上传大小限制进行进一步处理

mysql - 是否可以限制团体人数?