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

problemas con el COUNT

Estas en el tema de problemas con el COUNT en el foro de Bases de Datos General en Foros del Web. Hola a todos, a ver si me pueden ayudar con esta consulta, uso mysql 4.0.14. El tema es el siguiente, tengo un sistema de votacion ...
  #1 (permalink)  
Antiguo 07/11/2003, 12:17
 
Fecha de Ingreso: marzo-2003
Ubicación: Rosario, Argentina
Mensajes: 19
Antigüedad: 21 años, 1 mes
Puntos: 0
problemas con el COUNT

Hola a todos, a ver si me pueden ayudar con esta consulta, uso mysql 4.0.14.

El tema es el siguiente, tengo un sistema de votacion que utiliza una tabla que tiene los siguientes campos:

Código PHP:
t_opiniones:
id_opinion  id_socio  id_foro id_opcion...
1                10           1          1
2                10           1          2
3                10           2          1
4                11           1          1
4                11           1          2 
y otra:

Código PHP:
t_socios
id_socio id_pais sexo
...
10          2          m
11          4          f 
Tengo que recuperar datos de la siguiente forma:

Total de votos masculinos 2
Total de votos femeninos 1

Total de votos Mexico 5
Total de votos Colombia 3
Total de votos Argentina 2
Otros paises 6

Estuve probando utilizando de distintas maneras los GROUP BY y el COUNT, COUNT(DISTINCT ... ) pero lo mas cercano que logro es hacer es UNION de selects pero... no me convence, creo que con una consulta sola se debe poder.

Muchas gracias desde ya...

Última edición por mtroielli; 07/11/2003 a las 12:28
  #2 (permalink)  
Antiguo 07/11/2003, 13:51
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
asi es, usa join. por ejemplo, total de votos masculinos:

select count(id_opinion) from t_opiniones inner join t_socios
on t_opiniones.id_socio=t_socios.id_socio
where sexo='m';
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #3 (permalink)  
Antiguo 10/11/2003, 03:27
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 8 meses
Puntos: 2
Código PHP:
select id_paissexocount(*)
from t_opiniones a inner join t_socios b on a.id_socio b.id_socio
group by 1
,
Por medio de esta instruicción obtienes una tabla que te da para cada pais el número de votos por sexo. Si totalizas horizontalmente obtienes el total de votos por pais y si totalizas en vertical obtienes el total de votos por sexo.
Para obtener el total de votos de tres paises por un lado y el resto por otro, con el mysql estás obligado a hacer una union o dos selects.
  #4 (permalink)  
Antiguo 10/11/2003, 03:39
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 8 meses
Puntos: 2
He estado investigando un poco más y he encontrado lo siguiente.
Suponiendo que:
id_pais Pais
arg Argentina
col Colombia
mex México

puedes montar a select de esta manera
Código PHP:
select find_in_set(id_pais'arg, col, mex'),  sexocount(*)
from t_opiniones a inner join t_socios b on a.id_socio b.id_socio
group by 1
,
¿Que devuelve esto?. En principio si no encuentra el valor en el conjunto devuelve 0, sino devuelve la posición que ocupa el string (id_pais) en el conjunto (arg, col, mex). Con lo que sólo tendré que traducir por programa:
0: Otro
1: Argentina
2: Colombia
3: México.

Así tienes por país el número de votos por sexo.

Espero que esto te sirva.
Un saludo.

Última edición por Vice; 10/11/2003 a las 03:54
  #5 (permalink)  
Antiguo 10/11/2003, 05:39
 
Fecha de Ingreso: marzo-2003
Ubicación: Rosario, Argentina
Mensajes: 19
Antigüedad: 21 años, 1 mes
Puntos: 0
muchas gracias, esto funciona, pero los votos los tengo que recuperar por foro, es decir un socio puede votar mas de una vez en un foro y los votos se tienen que contabilizar como una solo, en el ejemplo de arriba el socio 10 votó en el foro 1 dos veces (la opcion 1 y 2) pero en realidad para el foro 1 se contabiliza un solo voto...
  #6 (permalink)  
Antiguo 11/11/2003, 02:29
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 8 meses
Puntos: 2
Con poner que quieres contar también por foro, llega:
Código:
select id_foro,find_in_set(id_pais, 'arg, col, mex'),  sexo, count(*)
from t_opiniones a inner join t_socios b on a.id_socio = b.id_socio
group by 1,2,3
Un saludo.

Última edición por Vice; 11/11/2003 a las 02:34
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 11:17.