2013-01-16 45 views
4

在產品頁面上,我有一個下拉列表,列出與產品頁面關聯的當前顏色選項。從起始值開始的MySQL訂單

在這個例子中,在產品頁面的SKU 250E,它提供:

GREEN 
BLACK 

如果客戶選擇綠色,然後我想運行一個MySQL的命令,這將改變數據首先顯示綠色價值觀基於下面顯示的custom_order值。

開始值應該覆蓋其他數據項,然後它應該保留custom_order值。該custom_order領域有着像C1字母,C2(他們總是會在底部)

Colour Table 
============ 
ID  COLOURID  NAME 
------------------------------------- 
2   5   BLACK 
3   6   GREEN 


Product Table 
============= 
ID  SKU   PICTURE URL    COLOURID   CUSTOM_ORDER   
----------------------------------------------------------------- 
22  250E  cdn_hash_1.jpg   5     1 
23  250E  cdn_hash_2.jpg   5     2 
24  250E  cdn_hash_3.jpg   5     3 
225  250E  cdn_hash_4.jpg   5     4 
226  250E  cdn_hash_5.jpg   6     5 
227  250E  cdn_hash_6.jpg   6     6 
325  250E  cdn_hash_c1.jpg   -     c1 
426  250E  cdn_hash_c2.jpg   -     c2 
527  250E  cdn_hash_c3.jpg   -     c3 

SELECT * FROM WHERE ORDER BY custom_order DESC

現在,我想做以下產品:

SELECT * FROM產品WHERE ORDER BY custom_order並開始VALUE = '6'

因此,無論怎樣,C1,C2保持不變,resul T公司將是:之前ORDER BY條款

SELECT * 
FROM products 
WHERE START_VALUE = '6' 
ORDER BY order 

一點題外話,ORDERRESERVED關鍵字

22  250E  cdn_hash_5.jpg   6     5 
23  250E  cdn_hash_6.jpg   6     6 
24  250E  cdn_hash_1.jpg   5     1 
225  250E  cdn_hash_2.jpg   5     2 
226  250E  cdn_hash_3.jpg   5     3 
227  250E  cdn_hash_4.jpg   5     4 
325  250E  cdn_hash_c1.jpg   -     c1 
426  250E  cdn_hash_c2.jpg   -     c2 
527  250E  cdn_hash_c3.jpg   -     c3 
+2

這將是明智的,重命名'order'列。 'ORDER'是mysql中的一個保留字。 – dnagirl

+0

謝謝你。更新。 – TheBlackBenzKid

+0

從答案來看,我認爲你需要澄清排序順序。 'COLOURID'是否應該用'START_VALUE'來放置這個ID的條目(按'CUSTOM_ORDER'排序),然後使用'CUSTOM_ORDER'對剩餘的條目進行排序? –

回答

9

這是我一直在尋找的答案。我希望我不會因此而低估,但我設法解決了這個問題。

讓我再解釋一下簡單的術語。 MySQL ORDER BY +開始於..

MySQL: 

id | name | 
------------ 
1 | Joe | 
2 | Craig | 
3 | Shawn | 
4 | Ryan | 
5 | Seth | 

PHP:

$a = mysql_query("SELECT * FROM table_name ORDER BY name DESC"); 

什麼,我想要做的雖然是,我想在ID開始:3,所以它應該輸出:

3,4,5,1,2 

解決方案1 ​​

SELECT id, name 
FROM table_name 
ORDER BY id < 3, id 

結果:

3 Shawn 
4 Ryan 
5 Seth 
1 Joe 
2 Craig 

解決方案2

您可以使用FIELD,如

SELECT * 
FROM products 
ORDER BY FIELD(`order`, 6) ASC 
+0

解決方案1幫助了我很多!謝謝! – ggzone

0

WHERE條件應該來。一種逃避它的方法是通過包裝反向。例如,

SELECT * 
FROM products 
WHERE START_VALUE = '6' 
ORDER BY `order` 

另一種方法是通過提供一個ALIAS

SELECT * 
FROM products p 
WHERE START_VALUE = '6' 
ORDER BY p.order 

,但你的問題回頭看,你想定製訂單數據嗎?您可以使用FIELD,例如

SELECT * 
FROM products 
ORDER BY FIELD(`order`, 6) ASC 
+0

您爲什麼要移除「START VALUE」 – TheBlackBenzKid

+0

我無法在您的欄中看到「START VALUE」。你想要自定義訂單嗎?第一個應該在列表中開始的值應該是'6'? –

+0

我喜歡你以前的答案。是的,如果客戶從頁面上的表單域中選擇一種顏色。下拉的值是6或30 - 無論如何,那麼它應該先從該組開始.. – TheBlackBenzKid

-2

請清除您的問題。如果你想要的所有記錄,使用查詢象下面...

SELECT * FROM產品WHERE ORDER BY COLOURID ASC,爲了DESC

+0

。 ..哪裏的起始價值考慮在內? –