标签:mysql
假设以下记录:
ID Value
=========
1. No
2. No
3. No
4. No
5. No
6. No
7. Yes
8. No
9. No
10. No
我的记录显示的每个“页面”包含5个记录(因此第1页有记录1-5,第2页有记录6-10,依此类推……).我想显示包含值为Yes的记录的页面.请记住,我真的不知道这些记录在哪里.
我该如何查询?
解决方法:
这样的事情怎么样:
/* Work out the page */
SELECT @MatchID = ID
FROM tbl
WHERE Value = 'Yes'
ORDER BY ID ASC
LIMIT 1;
SELECT @Page = CEIL(COUNT(*) / 5)
FROM tbl
WHERE ID <= @MatchID;
/* Select the items on that page */
SET @Offset = (@Page - 1) * 5;
SELECT *
FROM tbl
ORDER BY ID ASC
LIMIT @Offset, 5;
注意:上述内容不适合找不到@MatchID.
我不确定MySQL限制是否必须是常量,因此如果它们必须计算PHP中的偏移量,或者用于连接MySQL的任何编程语言.或者,这可能会起作用,而不是上面示例中的最后一个SELECT语句:
SET @selectSQL = CONCAT('SELECT * FROM tbl ORDER BY ID ASC LIMIT ', @Offset, ', 5');
PREPARE stmt FROM @selectSQL;
EXECUTE stmt;
标签:mysql 来源: https://codeday.me/bug/20190630/1337421.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。