繁体   English   中英

MySQL 按字段排序(列名,子查询)

[英]MySQL order by field(column_name, subquery)

我正在尝试获取数据以显示如下内容:

数据库架构:

类别ID 父类
香蕉 水果
苹果 水果
猕猴桃 水果
cucumber 蔬菜
celery 蔬菜
猪肉
牛肉
T恤 衣服
牛仔裤 衣服
毛衣 衣服
食物
水果 食物
蔬菜 食物
食物 null
衣服 null
select * from category 
order by 
field(category_id, "banana") desc,
field(parent_category, (SELECT parent_category FROM category WHERE category_id = "banana")) desc
field(category_id, (select category_id from category where parent_category <> (SELECT parent_category FROM category WHERE category_id = "banana"))) desc

我的目标结果是按以下顺序显示:
先香蕉,
其次是其他种类的水果,
其他种类的食物第三,
衣服最后(所有其他不被视为食物的数据。)
二级和三级类别不必展示(肉类、水果、蔬菜、T恤、牛仔裤、毛衣、食品、衣服)

也许是这样的:

SELECT * FROM category 
 WHERE 
    IF(parent_category='food',NULL,parent_category) IS NOT NULL
ORDER BY
   CASE WHEN category_id='banana' THEN 1
        WHEN parent_category='fruit' THEN 2
        WHEN parent_category='clothes' THEN 99
        ELSE 3 END;

ORDER BY部分中使用CASE表达式并过滤掉parent_categoryfoodNULL 结果将是这样的:

类别ID 父类
香蕉 水果
苹果 水果
猕猴桃 水果
cucumber 蔬菜
celery 蔬菜
猪肉
牛肉
T恤 衣服
牛仔裤 衣服
毛衣 衣服

演示小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM