[英]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_category
即food
和NULL
。 结果将是这样的:
类别ID | 父类 |
---|---|
香蕉 | 水果 |
苹果 | 水果 |
猕猴桃 | 水果 |
cucumber | 蔬菜 |
celery | 蔬菜 |
猪肉 | 肉 |
牛肉 | 肉 |
鸡 | 肉 |
T恤 | 衣服 |
牛仔裤 | 衣服 |
毛衣 | 衣服 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.