2010-07-17 26 views
0

我有一個使用status列來檢測,如果照片是驗證或不數據庫photos表的SELECT ...優先庫MySQLi:使用OR

所以如果照片有一個status = 0那麼它不進行驗證,但如果status = 1那麼照片被驗證。

我想補充status = 2選擇的照片作爲「主照片」這樣我就可以使用

SELECT photo WHERE status = 2 

,但如果沒有「主圖」選擇我要選擇的任何其他照片,但給優先與= 2(如果可用)狀態的照片..所以我想用這樣的:

SELECT photo WHERE status = 2 OR status != 2 

..但優先安排合影狀態2 ...所以如果有一個照片status 2它會選擇該照片,但如果沒有,那麼可以選擇Ÿ照片...

它可能做到這一點?

+3

我明白你爲什麼要讓「狀態」欄執行雙重任務,指示驗證和主要照片,但我建議不要這樣做,因爲它會在走廊測試中失敗。把你正在做的事告訴任何人,看看他們是否明白髮生了什麼事,而不必向他們解釋。明確你的專欄 - 「validation_status」和「main_photo_ind」應該是兩個,帶有描述性名稱的列。和可能的外鍵... – 2010-07-17 15:54:11

回答

0

如果status=2始終是最高優先級:

SELECT photo WHERE status = 2 OR status != 2 FROM your_table_name ORDER BY status 

或者更好:

SELECT photo FROM your_table_name ORDER BY status 

因爲status = 2 OR status != 2就是一切

+0

OR是相當無意義的。 – Donnie 2010-07-17 14:53:35

+0

從作者複製並粘貼 – jigfox 2010-07-17 14:54:08

0

嘗試這種情況:

SELECT photo, status = 2 AS priority 
FROM table 
ORDER BY priority DESC 

這裏表達status = 2將被評估,以任一1status = 2爲真)或0status = 2爲假)。

+0

不錯,看起來像你有很多經驗... – Jonathan 2010-07-27 18:17:06

0

如果狀態= 2並不總是最高優先級,你還可以獲得status = 2的第一行,然後是所有其他:

SELECT photo FROM table ORDER By status=2 desc 
1

我建議你添加另一列來存儲這個事實。如果你不這樣做,遲早(最可能更早)會出現另一個狀態值,然後會產生混淆,特別是如果狀態欄可以有多個含義(例如,3 =驗證過的主照片)。

+0

也許在接下來的代碼更新中,我會做一些數據庫優化... – Jonathan 2010-07-27 18:18:14