簡體   English   中英

當產品未鏈接到類別時,按類別訂購的SQL訂購產品不起作用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM