假设以下记录:
ID Value
=========
1. No
2. No
3. No
4. No
5. No
6. No
7. Yes
8. No
9. No
10. Nomy records display的每个“页面”包含5条记录(因此页面1有记录1-5,页面2有记录6-10,依此类推...)。我希望显示包含值为Yes的记录的页面。请记住,我并不真正知道这个Yes在记录中的位置。
如何查询?
发布于 2011-09-02 06:43:22
这样如何:
/* 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;发布于 2011-09-02 06:21:41
SELECT ID FROM tbl WHERE Value = "Yes" Order by ID ASC LIMIT 1;将ID除以“每页记录数”(在本例中为5)。然后你会得到第一个yes记录所在的"page“。
假设您的ID是主键(auto_increment)并且没有空格。
发布于 2011-09-02 06:22:21
好了,我想我现在明白了。选择与Value = 'YES‘的记录在同一页上的所有记录
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;https://stackoverflow.com/questions/7277187
复制相似问题