mysql - 根据多列对结果行进行排序

标签 mysql sql-order-by

我必须记下具有两个值 = 0 的不同字段的行

让我解释一下,所有具有 stock_it=0stock_eu=0 的记录都必须放在结果的底部

我已经使用了这个解决方案,但是,它并不严格正确,因为它甚至放下了两个值都不为 0 的行

$dati = mysql_query("
    SELECT      * 
    FROM        $tb_article
    ORDER BY
        FIELD($tb_art.article_status,'n') DESC, 
        FIELD($tb_art.article_stock_it,'0') ASC, 
        FIELD($tb_art.article_stock_eu,'0') ASC,  
        $tb_art.article_rank
");
  1. article_status=n 表示新产品,它们必须保持在顶部!
  2. 将所有有库存 IT 和库存 EU = 0 的文章推到底部(产品不可用)
  3. 最后,按照分配的排名对其余文章进行排序

最佳答案

您可以在 ORDER BY 中使用 CASE 语句,如下所示:

SELECT      * 
FROM        $tb_article
ORDER BY
   CASE WHEN article_status = 'n' THEN 0
        WHEN article_stock_it = 0 THEN 100000
        WHEN article_stock_eu = 0 THEN 100000
        ELSE article_rank
   END 

关于mysql - 根据多列对结果行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36085087/

相关文章:

php - MySQL 辅助查询对性能要求太高

Java MySQL SSL 错误

php - mysql php 私密邮箱之类的消息系统

mysql - 从 4 个不同的表中按日期排序

sql - T-SQL 四舍五入到 0.0、0.5 或 1.0

PHP IP 地址在循环中被截断

mysql - 存在多个匹配行时的排序依据和限制

c# - 使用 LINQ 对 IEnumerable 进行排序

mysql - SQL 按不同值排序

php - 网站内容如何存储?