mysql - SQL 查询以选择最少 10 个结果

标签 mysql sql

我想返回两种类型的结果:

  • 未读通知
  • 阅读通知

如果有 > 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 否则它将是 NULLNULL+1=NULL

enter image description here

关于mysql - SQL 查询以选择最少 10 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30341655/

相关文章:

mysql - 优化长 mysql 查询

MySQL存储过程循环遍历变量并插入临时表

mysql - 如何组合 mysql 和 linux bash 脚本?

php - 将信息从新创建的记录发送到不同的 MySQL 表

mysql - 如何从备份恢复 MySQL 数据库

sql - 如果函数不存在则创建一个函数,如果函数已经存在则更改函数

sql - 如何在 PostgreSQL 查询中对不同的元组进行排序

mysql - MySQL 连接查询莫名其妙的慢

c# - 连接字符串无效或定位服务器/实例时出错

mysql - 创建mysql表出错?