mysql - 选择一些项目,如果不够,则添加一些其他项目,然后排序

标签 mysql

这是我的表格项目:

id    type        important    date                
--------------------------------------------------
1     articles    0            2013-11-14 01:10:00
2     articles    0            2013-11-14 02:45:00
3     articles    1            2013-11-15 03:00:00
4     articles    0            2013-11-15 04:23:00
5     articles    1            2013-11-17 05:21:00
6     news        0            2013-11-18 06:00:00
7     news        0            2013-11-19 07:00:00
8     news        0            2013-11-19 08:00:00

我需要显示三个重要的项目,或者,如果没有足够的项目,则将新闻添加到组合中,直到出现三个。然后按日期从最新到最旧对它们进行排序。

如果我简单地写成:

SELECT * FROM `items` WHERE important = 1 OR type = 'news' 
ORDER BY `important` DESC, `date` DESC LIMIT 3

那么有两个重要的项目将高于最新的新闻项目。但我需要得到这个:

id    type        important    date                
--------------------------------------------------
8     news        0            2013-11-19 08:00:00
5     articles    1            2013-11-17 05:21:00
3     articles    1            2013-11-15 03:00:00

如何使用 SQL 执行此操作?

最佳答案

这样可以解决问题吗?

SELECT * FROM (
    SELECT * FROM `items` WHERE important = 1 OR type = 'news' 
    ORDER BY `important` DESC, `date` DESC LIMIT 3
) x
ORDER BY `date` DESC

关于mysql - 选择一些项目,如果不够,则添加一些其他项目,然后排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19981150/

相关文章:

mysql - 可以通过一个(mysql)查询在2个周期内检索数据吗?

php - 从html表中的 'textarea'内部循环中提取值以更新mysql数据库

php - 如何使用 php 删除 .htaccess 中的空格

mysql - 如何在 Laravel 中按字符和数字排序

mysql - 保持 mysql 连接打开

mysql - 我正在尝试使用 sql 划分两个选择查询,不确定这是否可行

mysql - ORDER BY Field 未按指定的 ID 号排序

php - 如何找出不同列中的两个最高值?

PHP:显示与所有联合限制相同的行值

mysql - jdbc 程序中出现 ClassNotFoundException