Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problrema con consulta

Estas en el tema de Problrema con consulta en el foro de Mysql en Foros del Web. Saludos gente veran tengo un problema desarrollo un seccion con categorias Tengo 2 tablas categorias y profesionistas en profesionistas tengo un campo llamado categoria que ...
  #1 (permalink)  
Antiguo 17/08/2011, 17:25
 
Fecha de Ingreso: julio-2005
Mensajes: 66
Antigüedad: 18 años, 9 meses
Puntos: 1
Problrema con consulta

Saludos gente veran tengo un problema desarrollo un seccion con categorias
Tengo 2 tablas categorias y profesionistas

en profesionistas tengo un campo llamado categoria que tiene el id de la tabla categorias

Quiero contar cuantos profesionistas tengo en registrados en la tabla profesionistas.

para que en pantalla se muestre por ejemplo Arquitecto (20) como los directorios comerciales.

Código MySQL:
Ver original
  1. SELECT categoria,COUNT(*) AS num FROM (SELECT c.categoria,COUNT(*) AS n.num FROM categorias c INNER JOIN profesionistas p ON c.id = p.categoria) T1 ORDER BY categoria ASC;

Necesito que me saque los totales y me ordene por ABC

Pero no sale

Saludos gracias de antemano.
  #2 (permalink)  
Antiguo 18/08/2011, 05:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problrema con consulta

Tienes al menos dos errores en esa consulta:
- Por un lado estás creando en un momento dado un alias de tabla "n.num", y no puedes crear alias con puntos u operadores matemáticos. Es una pésima práctica que genera errores difíciles de ver.
Esto lo habrías notado en cuanto hubieses capturado el error de MySQL, lo que me dice que no lo estás haciendo. Capturar errores es fundamental en programación...

- Por otro lado, estás haciendo un anidamiento sin ningún sentido, el cual en definitiva te dará 1 en todos los casos.
Esto es porque la subconsulta del from ya devuelve los resultados, un registro por categoría, pero como la exterior cuenta los diferentes registros devueltos por la subconsulta, y son diferentes todos, la consulta completa te devolverá 1 en cada caso.
¿Se entiende?

Código MySQL:
Ver original
  1.     C.categoria,
  2.     COUNT(*) num
  3.     categorias c INNER JOIN profesionistas p ON c.id = p.categoria
  4. ORDER BY C.categoria ASC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/08/2011, 08:27
 
Fecha de Ingreso: julio-2005
Mensajes: 66
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: Problrema con consulta

Hola gnzsoloyo buen día muchas gracias por responder he probado tu solución y ya me muestra algo pero solo me muestra 2 de 3 solo me muestra las que tienen profesionistas necesito que me muestra todas las categorias y las que no tienen registros de profesionistas me de 0 o sea,

Con tu solución me muestra lo siguiente:
Arquitectos (20)
Doctores (3)

Necesito que me muestre así:
Arquitectos (20)
Doctores (3)
Maestros(0)


Oo no sabia lo de los alias en operadores vaya

Edit: he probado cambiando a left join y ya me muestra la tercera categoria pero con 1 cuando no tengo registros ahi :S deberia ser 0

Saludos y gracias de antemano

Última edición por gromichs; 18/08/2011 a las 08:32
  #4 (permalink)  
Antiguo 18/08/2011, 08:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problrema con consulta

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/08/2011, 08:48
 
Fecha de Ingreso: julio-2005
Mensajes: 66
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: Problrema con consulta

No me sale como quiero :( en la tercera categoria Maestros me sale Maestros(1) cuando debe ser Maestros(0) porque no tengo registros en esa categoria mira

Código MySQL:
Ver original
  1. SELECT c.categoria COUNT(*) num FROM categorias c LEFT JOIN profesionistas p ON c.id = p.categoria GROUP BY c.categoria, c.id ORDER BY c.categoria ASC

Que esta mal?


Saludos
  #6 (permalink)  
Antiguo 18/08/2011, 08:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problrema con consulta

Eso tiene un truco. Como estás contando registros, hay al menos un registro que dice "MAESTROS", entonces sale 1. Lo que debe contarse no es la cantidad de registros, sino la cantidad que tienen una relacion válida, es decir, aquellos campos donde p.categoria sea diferente de NULL (no nos olvidemos que NULL no se suma con SUM(), ni cuenta con COUNT()).
Entonces sería:
Código MySQL:
Ver original
  1.     C.categoria,
  2.     COUNT(p.categoria) num
  3.     categorias c LEFT JOIN profesionistas p ON c.id = p.categoria
  4. ORDER BY C.categoria ASC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/08/2011, 09:08
 
Fecha de Ingreso: julio-2005
Mensajes: 66
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: Problrema con consulta

Ah ahora si :D muchas gracias gnzsoloyo :) ya va como quiero :P


Saludos

Etiquetas: join, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:05.