简体   繁体   English

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

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

I'm trying to get data in order to display something like this:我正在尝试获取数据以显示如下内容:

db schema:数据库架构:

category_id类别ID parent_category父类
banana香蕉 fruit水果
apple苹果 fruit水果
kiwi猕猴桃 fruit水果
cucumber cucumber vegetable蔬菜
celery celery vegetable蔬菜
pork猪肉 meat
beef牛肉 meat
chicken meat
t-shirt T恤 clothes衣服
jeans牛仔裤 clothes衣服
sweater毛衣 clothes衣服
meat food食物
fruit水果 food食物
vegetable蔬菜 food食物
food食物 null null
clothes衣服 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

my goal result is to display with following order:我的目标结果是按以下顺序显示:
banana first,先香蕉,
other kinds of fruits second,其次是其他种类的水果,
other kinds of food third,其他种类的食物第三,
clothes last (all other data that are not considered as food.)衣服最后(所有其他不被视为食物的数据。)
second and third level categories don't have to be displayed (meat, fruit, vegetable, t-shirt, jeans, sweater, food, clothes)二级和三级类别不必展示(肉类、水果、蔬菜、T恤、牛仔裤、毛衣、食品、衣服)

Perhaps something like this:也许是这样的:

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;

Using CASE expression in the ORDER BY section and filter out parent_category that is food and NULL .ORDER BY部分中使用CASE表达式并过滤掉parent_categoryfoodNULL Result will be like this:结果将是这样的:

category_id类别ID parent_category父类
banana香蕉 fruit水果
apple苹果 fruit水果
kiwi猕猴桃 fruit水果
cucumber cucumber vegetable蔬菜
celery celery vegetable蔬菜
pork猪肉 meat
beef牛肉 meat
chicken meat
t-shirt T恤 clothes衣服
jeans牛仔裤 clothes衣服
sweater毛衣 clothes衣服

Demo fiddle 演示小提琴

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

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