2012-05-22 13 views
5

Ad esempio, se queue_watch mostra uno 0, voglio che l'output mysql effettivo dica No, altrimenti dì Sì. Cambiare lo schema non è un'opzione.Come modificare l'output mysql in base al valore

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; 

Lo SQL funziona per quello che mi serve, ma mi piacerebbe sapere se la modifica della destinazione utilizzando SQL piuttosto che PHP è possibile. Inoltre, è possibile raggruppare tutti i nomi di coda in una riga per ogni user_name, quindi non è necessario restituire 153 righe.

Grazie

+0

"Inoltre, è possibile raggruppare ..." Per favore cerca 'GROUP BY' nel manuale. Potresti anche voler dare un'occhiata a 'GROUP_CONCAT'. E per favore non chiedere a due domande completamente indipendenti in una domanda. –

+0

So che mi dispiace per aver dirottato la domanda in due parti, ma poiché era correlata alla stessa query, pensavo che potesse anche esserlo. Ho pensato a GROUP BY ma il problema è group by restituisce un utente e un nome di coda, dato che un utente può appartenere a molte code - quindi lo voglio in una sorta di lista, ma non so se è possibile che –

+0

mi spiace fuori, raggruppa sul fondo, con group_concat nella selezione lo ha fatto ... –

risposta

8

Non è un overhead. È meglio che venga fatto nella query, credo.

Prova questa -

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

Questo in realtà ha risolto ciò di cui avevo bisogno, (l'ho visto per primo onestamente), e ho appena aggiunto il comando per rinominare la colonna. Grazie –

+0

Siete i benvenuti. – JHS

4

È possibile utilizzare lo standard CASE espressione. Esistono due modi leggermente diversi per scrivere un'espressione CASE.

semplice caso espressione:

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

espressione caso Ricerca:

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

Oppure si potrebbe usare MySQL specifica IF costrutto:

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

si può prendere in considerazione ciò che dovrebbe si verifica se il valore è diverso da 0 o 1.

+0

@MarcusAdams: Scusa, stavo per aggiungere. Stavo solo testando la mia risposta in SQL Fiddle solo per assicurarmi che tutto fosse OK, ma con mia sorpresa non ha funzionato lì. Non ero sicuro di aver erroneamente ricordato la sintassi, di aver digitato male qualcosa o se c'era un bug in SQL Fiddle. Sembra che sia un [bug in SQL Fiddle] (http://sqlfiddle.com/#!2/d41d8/711). –

+0

Bel lavoro che mostra il modo standard ANSI con 'CASE' così come il metodo MySQL' IF' più succinto. –

+0

Mi piace il caso..come metodo, ma dove inserisco il caso, ottengo l'errore sql, non importa dove lo inserisco nella query. –

Problemi correlati