簡體   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