我想返回两种类型的结果:
- 未读通知
- 阅读通知
如果有 > 10 个未读通知可用,我想选择尽可能多的通知
如果 <= 10,我想选择所有(假设有 7 个)未读通知和 3 个“填充”已读通知。我怎样才能做到这一点?
如果我只想选择所有未读通知,我的查询将是:
SELECT * FROM notifications WHERE read = 0
如果我只想选择所有已读通知,我的查询将是:
SELECT * FROM notifications WHERE read = 1
最佳答案
这应该可以帮助您:http://sqlfiddle.com/#!9/e7e2a/2
SELECT * FROM
(
SELECT @rownum := @rownum + 1 AS rownum, name, read
FROM notifications,
(SELECT @rownum := 0) r --initialise @rownum to 0
) t
WHERE read = 0 OR (read = 1 AND rownum <= 10)
ORDER BY rownum
记录用@rownum 编号。 where 子句确保首先选择 read=0。如果最多 10 个或更多,则全部选择。但如果不是,第二个标准(read = 1 AND rownum <= 10)
已检查。
(SELECT @rownum := 0) r
初始化 @rownum
到 0 否则它将是 NULL
和 NULL+1=NULL
关于mysql - SQL 查询以选择最少 10 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30341655/