2012-05-22 24 views
5

Por ejemplo, si queue_watch muestra un 0, quiero que la salida de mysql real diga que no, sino que diga sí. Cambiar el esquema no es una opción.Cómo cambio la salida de mysql según el valor

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; 

El SQL funciona para lo que necesito, pero me gustaría saber si el cambio de la salida utilizando SQL en lugar de PHP es posible. Además, ¿es posible agrupar todos los queue_names en una fila para cada nombre de usuario, por lo que no es necesario que se devuelvan 153 filas?

Gracias

+0

"Además, es posible agrupar ..." Por favor, busque 'GRUPO BY' en el manual. Es posible que también desee ver 'GROUP_CONCAT'. Y por favor no haga dos preguntas completamente independientes en una pregunta. –

+0

Lo siento por secuestrar la pregunta de dos partes, pero dado que estaba relacionada con la misma consulta, pensé que también podría serlo. Pensé en GROUP BY, pero el problema es group by devuelve un usuario y un nombre de cola, ya que un usuario puede pertenecer a muchas colas, por lo que lo quiero en una especie de lista, pero no sé si es posible –

+0

lo siento, pensé fuera, agrupe por la parte inferior, con group_concat en la selección lo hizo ... –

Respuesta

8

No es un exceso de cabeza. Es mejor hacerlo en la consulta, creo.

probar este -

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

Éste realmente resolvió lo que necesitaba, (lo vi primero honestamente), y acabo de agregar el nombre para cambiar el nombre de la columna. Gracias –

+0

Eres Bienvenido. – JHS

4

Puede utilizar la expresión CASE estándar. Hay dos formas ligeramente diferentes de escribir una expresión CASE.

expresión Caso sencillo:

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

expresión CASE de búsqueda:

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

O usted podría utilizar el MySQL específica IF construcción:

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

es posible que desee considerar lo que debe suceder si su valor es algo diferente de 0 o 1.

+0

@MarcusAdams: Lo siento, de hecho iba a agregar eso. Estaba probando mi respuesta en SQL Fiddle solo para asegurarme de que todo estaba bien, pero para mi sorpresa, no funcionó allí. No estaba seguro si había olvidado la sintaxis, si había escrito algo mal o si había un error en SQL Fiddle. Parece que es un [error en SQL Fiddle] (http://sqlfiddle.com/#!2/d41d8/711). –

+0

Buen trabajo que muestra la forma estándar de ANSI con 'CASE', así como el método MySQL' IF' más sucinto. –

+0

Me gusta el caso ... como método, pero donde pongo el caso, obtengo el error sql sin importar dónde lo coloque en la consulta. –

Cuestiones relacionadas