[英]MySQL order by field(column_name, subquery)
I'm trying to get data in order to display something like this:我正在尝试获取数据以显示如下内容:
db schema:数据库架构:
category_id![]() |
parent_category![]() |
---|---|
banana![]() |
fruit![]() |
apple![]() |
fruit![]() |
kiwi![]() |
fruit![]() |
cucumber ![]() |
vegetable![]() |
celery ![]() |
vegetable![]() |
pork![]() |
meat![]() |
beef![]() |
meat![]() |
chicken![]() |
meat![]() |
t-shirt ![]() |
clothes![]() |
jeans![]() |
clothes![]() |
sweater![]() |
clothes![]() |
meat![]() |
food![]() |
fruit![]() |
food![]() |
vegetable![]() |
food![]() |
food![]() |
null ![]() |
clothes![]() |
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_category
即food
和NULL
。 Result will be like this:结果将是这样的:
category_id![]() |
parent_category![]() |
---|---|
banana![]() |
fruit![]() |
apple![]() |
fruit![]() |
kiwi![]() |
fruit![]() |
cucumber ![]() |
vegetable![]() |
celery ![]() |
vegetable![]() |
pork![]() |
meat![]() |
beef![]() |
meat![]() |
chicken![]() |
meat![]() |
t-shirt ![]() |
clothes![]() |
jeans![]() |
clothes![]() |
sweater![]() |
clothes![]() |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.