2012-05-22 33 views
5

例如,如果queue_watch顯示0,我希望實際的mysql輸出結果爲否,否則請說Yes。改變方案不是一種選擇。如何更改基於值的mysql輸出

SELECT user.user_name, queue.queue_name, queue_access.queue_access, 
    queue_access.queue_watch 
FROM queue_access 
INNER JOIN user ON user.user_id = queue_access.user_id 
INNER JOIN queue ON queue.queue_id = queue_access.queue_id 
WHERE queue_access <> '' OR queue_watch = 1 
ORDER BY user_name; 

SQL適用於我所需要的,但我想知道是否可以使用SQL而不是PHP來更改輸出。另外,是否可以將一行中的所有queue_name分組到每個user_name,因此我不必返回153行。

感謝

+0

「此外,是否有可能組......」請查找'集團BY'的說明書中無。你可能也想看看'GROUP_CONCAT'。請不要在一個問題中提出兩個完全不相關的問題。 –

+0

我知道爲劫持這兩個部分的問題感到抱歉,但是因爲它與我認爲可能的同一個查詢有關。我確實認爲GROUP BY,但問題是group by返回一個用戶和一個隊列名稱,因爲一個用戶可以屬於許多隊列 - 所以需要它在一個列表中,但不知道它是否可能 –

+0

對不起,我想它出來,在底部組合,在選擇group_concat做到了... –

回答

8

它不是一個頭頂。我覺得,在查詢中做得更好。

試試這個 -

SELECT user.user_name, queue.queue_name, queue_access.queue_access, 
     IF(queue_access.queue_watch = 0, 'No', 'Yes') 
FROM queue_access 
INNER JOIN user ON user.user_id = queue_access.user_id 
INNER JOIN queue ON queue.queue_id = queue_access.queue_id 
WHERE queue_access <> '' OR queue_watch = 1 
ORDER BY user_name; 
+0

這一個實際上解決了我需要的東西(我首先誠實地看到了它),並且我添加了as來重命名該列。謝謝 –

+0

歡迎你。 – JHS

4

您可以使用標準的CASE表達。有兩種略有不同的方式來編寫CASE表達式。

簡單的情況下表達:

SELECT 
    CASE queue_access.queue_watch 
     WHEN 0 THEN 'No' 
     ELSE 'Yes' 
    END AS your_alias, 
    ... 

搜索的情況下表達:

SELECT 
    CASE WHEN queue_access.queue_watch = 0 THEN 'No' ELSE 'Yes' END AS your_alias, 
    ... 

或者你可以使用MySQL的具體IF結構:

SELECT 
    IF(queue_access.queue_watch, 'Yes', 'No') AS your_alias, 
    ... 

你可能要考慮又該如果您的值不是0或1,則會發生。

+0

@MarcusAdams:對不起,我實際上會補充說。我只是在SQL小提琴中測試我的答案,以確保一切正常,但令我驚訝的是它並沒有在那裏工作。不知道我是否錯誤地記住了語法,輸錯了什麼,或者SQL小提琴中是否有錯誤。看起來像是[SQL小提琴中的錯誤](http://sqlfiddle.com/#!2/d41d8/711)。 –

+0

不錯的作品展示了帶有CASE的ANSI標準方式以及更簡潔的MySQL IF方法。 –

+0

我喜歡case..as方法,但是我把它放在哪裏,無論我把它放到查詢中,我都會得到sql錯誤。 –