entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Consulta MySQL, filtrar por un valor en un campo

Hola, tengo que hacer una consulta SQL que devuelva un listado de productos, pero para un caso concreto solo el primero que encuentre. Me explico, imaginemos esta tabla:

Tabla: productos
id - producto - clave
1 - Producto A -
2 - Producto B -
3 - Producto C -
4 - Producto D1 - D
5 - Producto D2 - D
6 - Producto D3 - D
7 - Producto E -

Necesito obtener todos los productos de la tabla. Pero en el caso de que la clave no esté vacía, solo el primero de ellos.

En este caso necesitaría obtener los productos con id 1, 2, 3, 7 (que tienen la columna clava vacía) y el producto 4 (que es el primero con la clave D)

Es decir, estos son los resultados que busco:
id - producto - clave
1 - Producto A -
2 - Producto B -
3 - Producto C -
4 - Producto D1 - D
7 - Producto E -

(Quedan excluidos el producto D2 y el producto D3 porque para cada valor de la columna "clave" solo quiero recuperar un producto. Junto con los que tengan dicha columna vacía)

Estaba pensando en obtener todos y después filtrar los resultados con PHP. Pero, ¿podría conseguir lo que busco con una consulta SQL?

2votos

Leonardo-Tadei comentado

No alcanzo a comprender la pregunta. Podrías editarla y poner el conjunto resultado que querés obtener con esos datos de ejemplo?

1voto

angelAparicio comentado

¡Hecho! Pregunta editada.

1voto

morgooth comentado

No pensaste en hacer un procedimiento de almacenado ?
o hacer dos consultas como por ejemplo:

SELECT FROM productos WHERE clave = ''
union ALL
(SELECT
FROM productos WHERE clave != '' limit 1)

1voto

magarzon comentado

@morgooth mejor huir de los procedimientos almacenados y de los union, el 99% de las veces hay mejores soluciones que esas (ya le he dado una)

1 Respuesta

4votos

magarzon Puntos30650

Buenas, lo que quieres hacer básicamente es un group by por la clave, lo que pasa es que los registros con la clave a null se agruparían también como uno solo, por lo que lo que hay que hacer es agrupar por un campo generado que sea único (por ejemplo el id, por no andar generando más cosas) cuando la clave sea null, o igual a la clave cuando esta exista.

En definitiva, esto resuelve tu pregunta:

SELECT id, producto, clave, IF(ISNULL(clave), id, clave) as clave2 FROM productos GROUP BY clave2;

Saludos.

1voto

angelAparicio comentado

¡Perfecto!, me da justo los resultados que buscaba, gracias.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta