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

Ayuda con consulta.. por favor

Estas en el tema de Ayuda con consulta.. por favor en el foro de Mysql en Foros del Web. Pues resulta que tengo que buscar todos los usuarios que tengan foto en su perfil y ordenarlos por sexo... hize algo asi pero no sirve.. ...
  #1 (permalink)  
Antiguo 09/02/2006, 19:05
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
Ayuda con consulta.. por favor

Pues resulta que tengo que buscar todos los usuarios que tengan foto en su perfil y ordenarlos por sexo... hize algo asi pero no sirve..

Código:
SELECT ig.profile_gender_name_en, ip.uid
FROM  i_profile ip, i_profile_gender ig, i_subprofile_1 ipg1, i_subprofile_2 ipg2, i_subprofile_3 ipg3
WHERE 
(ipg1.uid = ip.uid AND ipg1.photo_status_id <> '0') OR
(ipg2.uid = ip.uid AND ipg2.photo_status_id <> '0') OR
(ipg3.uid = ip.uid AND ipg3.photo_status_id <> '0') AND
ip.profile_gender_id =  ig.profile_gender_id
GROUP BY ip.uid
ahora las tablas son

i_profile
uid => id usuario
profile_gender_id =>Id del sexo del usuario

i_profile_gender
profile_gender_id =>Id del sexo
profile_gender_name_en => descricion (hombre, mujer...)

i_subprofile_(1,2,3) son tres tablas iguales, osea 3 profiles
uid => id usuario
photo_status_id => si tiene foto en ese profile 0, no tiene

Ahora la cosa es que no puedo obtener el resultado que quiero, si le quito el group me tira algo asi...

Código:
 
profile_gender_name_en   	  uid
Male 	10000001
Male 	10000001
Male 	10000001
Male 	10005314
Male 	10000001
Male 	10000002
Female 	10000001
Female 	10000001
Female 	10000001
Female 	10005314
Female 	10000001
Female 	10000002
Couple 	10000001
Couple 	10000001
Couple 	10000001
Couple 	10005314
Couple 	10000001
Couple 	10000002
Group 	10000001
...          ....
y con el group Me da esto (que es como deberia ser, ya que anterior me da un producto cartesiano no se porque)

Código:
 
profile_gender_name_en   	  uid
Male 	10000001
Male 	10000002
Male 	10005311
Male 	10005314
Female 	10005348
Male 	10005354
Male 	10005357
Son solo esos los usuarios que tiene foto. pero me gustaria obtener un resultado como este

Código:
 
profile_gender_name_en   	  count(uid)
Male 	6
Female 	1
pero no se como... ayuda porfa que estoy desesperado
__________________
Siempre hay algo nuevo que aprender
  #2 (permalink)  
Antiguo 10/02/2006, 03:37
 
Fecha de Ingreso: enero-2006
Mensajes: 22
Antigüedad: 18 años, 3 meses
Puntos: 0
Para poder contar el numero de registros que poseen esa característica, debes aplicar la funcion count.
Tu query quedaria de la siguiente forma:
SELECT ig.profile_gender_name_en, count(ip.uid)
FROM i_profile ip, i_profile_gender ig, i_subprofile_1 ipg1, i_subprofile_2 ipg2, i_subprofile_3 ipg3
WHERE
(ipg1.uid = ip.uid AND ipg1.photo_status_id <> '0') OR
(ipg2.uid = ip.uid AND ipg2.photo_status_id <> '0') OR
(ipg3.uid = ip.uid AND ipg3.photo_status_id <> '0') AND
ip.profile_gender_id = ig.profile_gender_id
GROUP BY ig.profile_gender_name_en, ip.uid

Espero que te sirva de ayuda,
Salu2.
  #3 (permalink)  
Antiguo 10/02/2006, 08:47
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
Pues no funciona, regresa el siguiente set....

Código:
 profile_gender_name_en   	  count( ip . uid )
Couple 	464
Couple 	464
Couple 	32
Couple 	440
Couple 	32
Couple 	32
Female 	626
Female 	464
Female 	32
Female 	440
Female 	220
Female 	32
Female 	32
Female Couple 	464
Female Couple 	464
Female Couple 	32
Female Couple 	32
...                       ...
Como va a regresar eso si solo hay 7 usuarios con foto en la BD (contando cualquiera de sus 3 profiles)
__________________
Siempre hay algo nuevo que aprender

Última edición por HIa; 10/02/2006 a las 09:47
  #4 (permalink)  
Antiguo 10/02/2006, 09:46
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
pues al final la respuesta a mi problema fue esta....
Código:
SELECT ig.profile_gender_name_en, count(distinct(ip.uid))
FROM i_profile ip, i_profile_gender ig, i_subprofile_1 ipg1, i_subprofile_2 ipg2, i_subprofile_3 ipg3
WHERE 
(ip.uid = ipg1.uid  AND ipg1.photo_status_id <> '0' and ip.profile_gender_id = ig.profile_gender_id) or
(ip.uid = ipg2.uid  AND ipg2.photo_status_id <> '0' and ip.profile_gender_id = ig.profile_gender_id) or 
(ip.uid = ipg3.uid  AND ipg3.photo_status_id <> '0' and ip.profile_gender_id = ig.profile_gender_id)
GROUP BY  ig.profile_gender_name_en
Pareciera que no es la mejor implementación, pero bueno me tira el total de usuarios por sexo y eso es mi goal.... vamos a ver como se comporta en el app real :D

Código:
 profile_gender_name_en   	  count( distinct ( ip . uid ) )
Couple 	1
Female 	3
Male 	3
pero gracias por tu ayuda ^_^
__________________
Siempre hay algo nuevo que aprender
  #5 (permalink)  
Antiguo 10/02/2006, 13:42
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
holas HIa, me parece que la estructura de tablas que maneja no es la mas optima que podria decirse, a medida que vayan creciendo tus tablas haras unas consultas cada vez mas pesadas, seria tal vez una buena idea en pensar otra manera de usar esas tablas que tienes repetidas, ahora otro aspecto sobre tu consulta para ayudar un poco a que consuman menos recursos, por que no haces los joins por medio de INNER JOIN, te ayudara bastante en tus tiempos de ejecucion:

Código:
SELECT
  ig.profile_gender_name_en, count(distinct(ip.uid))
FROM 
  (i_profile ip INNER JOIN i_subprofile_1 ipg1 ON ip.uid = ipg1.uid) INNER JOIN i_profile_gender ig ON ip.profile_gender_id = ig.profile_gender_id),
  (i_profile ip INNER JOIN i_subprofile_2 ipg2 ON ip.uid = ipg2.uid) INNER JOIN i_profile_gender ig ON ip.profile_gender_id = ig.profile_gender_id),
  (i_profile ip INNER JOIN i_subprofile_3 ipg3 ON ip.uid = ipg3.uid) INNER JOIN i_profile_gender ig ON ip.profile_gender_id = ig.profile_gender_id)
WHERE 
  ipg1.photo_status_id <> '0' OR ipg2.photo_status_id <> '0' OR ipg3.photo_status_id <> '0' 
GROUP BY  
  ig.profile_gender_name_en
seria bueno que lo revises, tal vez me equivoque en algo por ahi pero es para darte la idea principal, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #6 (permalink)  
Antiguo 14/02/2006, 04:46
Avatar de HIa
HIa
 
Fecha de Ingreso: noviembre-2002
Ubicación: Cartago
Mensajes: 121
Antigüedad: 21 años, 5 meses
Puntos: 0
Voy a revisarlo.. gracias... y lo de las tablas varia gente me ha dicho lo mismo, pero el problema es que el sistema esta montado desde hace 3 años y la page tiene 5 millones de usuarios.... asi que cambiar la estructura a estas alturas no creo que seria muy viable. Voy a revisar lo del inner join porque nunca lo he usado
__________________
Siempre hay algo nuevo que aprender
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 14:22.