2010-09-21 78 views
2

我有一個有兩個字段的MySQL表:MySQL按2個參數排序

pd_code和pd_sort(pd_sort默認值= 0)。對於每個產品,可以指定一個訂單索引(在pd_sort中)-1000,-900等等。

所以當我用PHP打印出產品時,我想把它們整理成這樣。

product1(pd_sort = -100),product2(pd_sort = -90)等,然後其餘產品(其中pd_sort = 0)按pd_code排序。

ORDER BY pd_sort,pd_code僅適用於2種產品。

有什麼建議嗎?

克里斯

+1

一小組樣本數據對於回答這個問題會非常有幫助,理想情況是以'insert'語句的形式插入一個小表(例如,只有'pd_code','pd_sort'和第三個標籤類的東西)。 – 2010-09-21 07:37:37

回答

3

如果我理解正確的,你應該嘗試這樣的事:

SELECT * FROM table 
WHERE pd_sort <> 0 
ORDER BY pd_sort 

UNION 

SELECT * FROM table 
WHERE pd_sort = 0 
ORDER BY pd_code 
+0

是的,我想這是對的,謝謝! – Chris 2010-09-21 07:38:21

0

一名工會爲jab suggested應該是相當有效的,即使它導致兩個查詢,而不是一個。

如果您不想因任何原因進行聯合,另一種方法是讓select通過操作pd_codepd_sort值來生成列,然後在該列上進行排序。您還沒有給我們提供樣本數據來處理(當然,除了一些pd_sort值之外),但在大多數情況下,可以操縱數據,以便最終獲得可排序的值,通常只需通過連字符或數字表達式。但在最複雜的情​​況下,您可以回到case聲明。

+0

在我看來,Daniel Vassallo在刪除他的答案之前就已經有了一些東西。也許他給出的實際例子不太適合你的情況,但是這個概念 - 在'order by'中使用表達式 - 是合理的(實際上與上面類似)。 – 2010-09-21 07:48:27