Comunidad de diseño web y desarrollo en internet online

COUNT + GROUP BY + condición

Citar            
MensajeEscrito el 22 Ago 2008 07:38 am
Siguiendo con la consulta que Dano me resolvió, ahora quiero que el COUNT me devuelva sólo los vídeos que esten habilitados en la base de datos. Para ello tengo en la bd un campo llamado "activo".

El caso es que cuando añado la penúltima línea (AND v.activo = "1") ya no me devuelve ningún resultado, no sólo el count, sino que tampoco me devuelve los datos de ningún vendedor. No entiendo por qué esto es así, dado que al usar LEFT OUTER JOIN para unir la tabla "tbl_videos", aunque esta me devolviera un resultado nulo, debería seguir devolviendome todos los resultados de la tabla p.

Código :

SELECT p.*, COUNT(v.id_video) AS num_videos  
FROM tbl_vendedores AS p 
LEFT OUTER JOIN tbl_videos AS v ON p.id_vendedor = v.id_vendedor
WHERE p.id_vendedor = "23"
AND v.activo = "1"
GROUP BY p.id_vendedor


Gracias por vuestra atención

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Ago 2008 10:27 pm
Probaste con left inner ?

Poné el link a la consulta de DANO resuelta.

Tiene que ver con la sintaxis segurísimo. Fijate si te tira algún error en phpmyadmin o similar o te ejecuta la consulta exitosamente pero no te devuelve nada (ya se q por ahora no te devuelve, pero hay q ver si es por error o xq resultado vacío)

Por tomasdev

220 de clabLevel

1 tutorial

 

Argentina por ahora...

firefox
Citar            
MensajeEscrito el 23 Ago 2008 10:21 am
La consulta no da ningún error, y me devuelve un resultado correcto excepto en el caso de que no haya ningún video para el vendedor, en ese caso me devuelve un resultado vacio.

Si pongo left inner sí que me da un error de sintaxis.

Esta es la consulta que me resolvio Dano sobre GROUP BY:
[url=]http://www.cristalab.com/foros/t60067_problemas-con-group-by.html#403874[/url]

Gracias por vuestra ayuda y un saludo

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ago 2008 04:20 pm
Solución, que el where contemple la posibilidad del row vacío:

Código :

SELECT p.*, COUNT(v.id_video) AS num_videos  
 FROM tbl_vendedores AS p 
 LEFT OUTER JOIN tbl_videos AS v ON p.id_vendedor = v.id_vendedor
 WHERE p.id_vendedor = "23"
 AND (v.activo = "1" OR v.id_video IS NULL)
 GROUP BY p.id_vendedor

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 23 Ago 2008 08:26 pm
Pero la idea es que todos tengan el estado activo en 1 o 0... ponle valor por defecto "0", para que al crearlo no este activo pero si despues se activa(por algun metodo), valga.

Por tomasdev

220 de clabLevel

1 tutorial

 

Argentina por ahora...

firefox
Citar            
MensajeEscrito el 26 Ago 2008 08:42 am
Gracias por vuestras respuestas, pero me parece que no me he explicado bien:

Tengo una tabla "vendedores":
id_vendedor*, nombre, apellidos

Y una tabla "vídeos":
id_video*, id_vendedor, titulo, descripcion

Y quiero obtener los datos del vendedor y el número de vídeos asociados a ese vendedor, incluso en el caso en el que haya 0 vídeos. El problema es que con la consulta que puse, si hay 0 vídeos, no me devuelve "0" en el COUNT, sino que me devuelve un resultado vacío (es decir, tampoco me devuelve los datos del vendedor). He probado haciendo las modificaciones que me habeis comentado y no cambia nada. ¿Es posible que no se pueda hacer lo que quiero en una sola consulta?

Gracias de nuevo

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Ago 2008 02:50 pm

Código :

SELECT p.*, 
if(v.id_video, COUNT(v.id_video), 0) AS num_videos  
 FROM tbl_vendedores AS p 
 LEFT OUTER JOIN tbl_videos AS v ON p.id_vendedor = v.id_vendedor
 WHERE p.id_vendedor = "23"
 AND (v.activo = "1" OR v.id_video IS NULL)
 GROUP BY p.id_vendedor

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 26 Ago 2008 08:23 pm
if dentro de consulta? esa no la tenia

Por tomasdev

220 de clabLevel

1 tutorial

 

Argentina por ahora...

firefox
Citar            
MensajeEscrito el 27 Ago 2008 07:25 pm
Gracias, parece que con esa ultima sugerencia ya si funciona (por lo menos las pruebas que he hecho hasta ahora) aunque he tenido que modificar un poco la consulta, que quedaria mas o menos asi:

Código :

SELECT p.*, 
[b]COUNT(if(v.activo, v.id_video, 0) AS num_videos [/b] 
 FROM tbl_vendedores AS p 
 LEFT OUTER JOIN tbl_videos AS v ON p.id_vendedor = v.id_vendedor
 WHERE p.id_vendedor = "23"
[del] AND (v.activo = "1" OR v.id_video IS NULL)[/del]
 GROUP BY p.id_vendedor


Muchas gracias, llevaba varios dias detras de arreglarlo. Un saludo.

Por akhasis

75 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.