[英]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.