[英]SQL Ordering products by category order not working when product is not linked to a category
我有兩個表,類別和產品。 我正在嘗試執行一條select語句,使所有產品脫穎而出,並使用Categories表中的order列對其進行訂購。
Categories
+--------+-------+-------+
| cat_id | name | order |
+--------+-------+-------+
| 1 | Cat 1 | 1 |
| 2 | Cat 2 | 3 |
| 3 | Cat 2 | 2 |
+--------+-------+-------+
Products
+---------+--------+-------+--------+
| prod_id | name | price | cat_id |
+---------+--------+-------+--------+
| 1 | Prod 1 | 1.99 | 1 |
| 2 | Prod 2 | 2.99 | 2 |
| 3 | Prod 3 | 3.99 | 3 |
| 4 | Prod 4 | 4.99 | 0 |
| 5 | Prod 5 | 4.99 | 2 |
+---------+--------+-------+--------+
我設法構建了此SQL語句來完成該任務。
SELECT p.* FROM products AS p
JOIN categories AS c
ON c.cat_id = i.cat_id
ORDER BY c.order ASC
問題在於產品不必屬於一個類別,如果不是,則此查詢將不會檢索它們。 雖然我可以不使用聯接就執行第二個查詢並追加到第一個查詢,但是當我開始為產品設置分頁時肯定會出現問題,因為我認為計算要顯示的產品將變得太復雜。 有什么我能做的嗎?
您需要確定如何訂購它們。
SELECT p.*
FROM products p LEFT JOIN
categories AS c
ON c.cat_id = i.cat_id
ORDER BY c.`order` ASC;
MySQL碰巧將NULL
值放在升序中。 您可能最后要他們。 所以這樣做
SELECT p.*
FROM products p LEFT JOIN
categories AS c
ON c.cat_id = i.cat_id
ORDER BY (c.`order` is not null) DESC,
c.`order` ASC;
如果定義了order
則表達式(c.order is not null)
為0
,否則為1
。
而且, order
對於列而言是一個非常不好的名字,因為它是MySQL保留的單詞(實際上,它在所有數據庫中都保留)。 您可能會考慮priority
東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.