MySQLi:使用OR选择SELECT优先级

时间:2010-07-17 14:41:22

标签: mysql greatest-n-per-group

我在数据库中有一个photos表,该表使用status列来检测照片是否已经过验证...

因此,如果照片中有status = 0,则表示未经过验证,但如果照片status = 1则照片已经过验证。

我想添加status = 2以选择照片作为“主照片”,以便我可以使用

SELECT photo WHERE status = 2

但如果没有选择“主照片”,我想选择任何其他照片,但优先考虑状态= 2的照片(如果有的话)..所以我想使用这样的东西:

SELECT photo WHERE status = 2 OR status != 2

..但优先考虑状态为2的照片...所以如果有status 2的照片,它会选择该照片,但如果没有则可以选择任何照片... < / p>

可以这样做吗?

4 个答案:

答案 0 :(得分:1)

我建议您添加另一列来存储此事实。如果不这样做,迟早(很可能更早)会出现另一个状态值,然后会产生混淆,特别是如果状态列可以有多种含义(例如3 =经验证的主照片)。

答案 1 :(得分:0)

试试这个:

SELECT photo, status = 2 AS priority
FROM table
ORDER BY priority DESC

此处表达式status = 2将评估为1status = 2为真)或0status = 2为false)。

答案 2 :(得分:0)

如果status=2始终是最高优先级:

SELECT photo WHERE status = 2 OR status != 2 FROM your_table_name ORDER BY status

或更好:

 SELECT photo FROM your_table_name ORDER BY status

因为status = 2 OR status != 2就是一切

答案 3 :(得分:0)

如果status = 2并不总是最高优先级,您仍然可以获得status = 2的第一行,然后是其他所有行:

SELECT photo FROM table ORDER By status=2 desc