2017-04-22 18 views
-1

該數據庫由值開始訂單,如果該值是不存在讓其他

[  title - content -  class  ] 
[  PHP  -  lOREM  -  a  ] 
[  CSS  -  Lorem  -  b  ] 
[  PDO  -  lOREM  -  c  ] 
[  PHP  -  Lorem  -  d  ] 

我想通過類來啓動順序= A,但是,如果此行有此類不存在,它直接顯示下一個,我使用此查詢

SELECT title, content FROM posts WHERE title = :title ORDER BY class = 'a' DESC LIMIT 1 

當類a的行不存在時,不會顯示任何內容。我該如何解決這個問題?

+0

你的問題是沒有意義的。什麼是'id'?提供期望的結果。 –

+0

@GordonLinoff修復了一下,如果類a不存在,我想讓它去d類 –

+0

用你正在使用的數據庫標記你的問題。 –

回答

0

你可以做到這一點,具有優先級:

SELECT p.title, p.content 
FROM posts p 
WHERE p.title = :title 
ORDER BY (CASE class WHEN 'a' THEN 1 WHEN 'b' THEN 2 WHEN 'c' THEN 3 WHEN 'd' THEN 4 END) 
LIMIT 1; 

或者更簡單地說:

ORDER BY field(class, 'a', 'b', 'c', 'd') 

當然,在你的情況下,類是按字母順序排列,所以你可能只是做:

ORDER BY class ASC 

編輯:

如果你想要把一個班的在別人面前:

ORDER BY (class = 'A') DESC, class 
+0

但在我的情況下,我喜歡200類的類型,是不是可能以'A'開始,然後是自然順序? –

+0

@CaliburVictorious。 。 。看看最後的建議。如果字母順序工作,那麼只需使用'ORDER BY class'。 –

+0

但是我想要例如以字母S開始,那麼如果S不存在,要轉到通常的順序,我可以使用PHP來執行此操作,但是僅使用SQL可能嗎? –

0

你的錯,是用引號"代替省略號的'爲您的文字文本,再加上它的簡單逆轉條件(真排序後假)。

試試這個:

SELECT title, content 
FROM posts 
WHERE title = :title 
ORDER BY class != 'a', class -- instead of "a" 
LIMIT 1 
相關問題