首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:显示包含记录的页面

MySQL:显示包含记录的页面
EN

Stack Overflow用户
提问于 2011-09-02 06:15:28
回答 4查看 530关注 0票数 4

假设以下记录:

代码语言:javascript
复制
ID  Value
=========
1.  No
2.  No
3.  No
4.  No
5.  No
6.  No
7.  Yes
8.  No
9.  No
10. No

my records display的每个“页面”包含5条记录(因此页面1有记录1-5,页面2有记录6-10,依此类推...)。我希望显示包含值为Yes的记录的页面。请记住,我并不真正知道这个Yes在记录中的位置。

如何查询?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-02 06:43:22

这样如何:

代码语言:javascript
复制
/* 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语句:

代码语言:javascript
复制
SET @selectSQL = CONCAT('SELECT * FROM tbl ORDER BY ID ASC LIMIT ', @Offset, ', 5');
PREPARE stmt FROM @selectSQL;
EXECUTE stmt;
票数 3
EN

Stack Overflow用户

发布于 2011-09-02 06:21:41

代码语言:javascript
复制
SELECT ID FROM tbl WHERE Value = "Yes" Order by ID ASC LIMIT 1;

将ID除以“每页记录数”(在本例中为5)。然后你会得到第一个yes记录所在的"page“。

假设您的ID是主键(auto_increment)并且没有空格。

票数 0
EN

Stack Overflow用户

发布于 2011-09-02 06:22:21

好了,我想我现在明白了。选择与Value = 'YES‘的记录在同一页上的所有记录

代码语言:javascript
复制
SET @c:=0;
SELECT tbl.* FROM tbl WHERE CEIL((@c:=@c+1) / 5) = (SELECT CEIL(COUNT(temp_table.id) / 5) FROM tbl temp_table WHERE temp_table.id <= (SELECT temp2.id FROM tbl temp2 WHERE temp2.value = 'YES')) ORDER BY tbl.id ASC;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7277187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档