Consultas en mysql

Estoy haciendo una consulta.. La cual demora mucho en hacerla... Quizás tengas una manera más sencilla se hacerla.. Espero tu ayuda...
Tengo 2 tablas :
1.- Descargas
Id, suscriptor, tipo, fecha, hora, etc
2.- Suscriptores
Codigo1, codigo2, codigo3, codigo4, razonsocial, flg_internet, etc
El campo suscriptor de la tabla descargas es la concatenación del campo codigo1-codigo2-codigo3-codigo4 de la tabla suscriptores. (por eso en el where va asi..)..
- El campo tipo de la tabla descargas es el identificador de servicios...
Por ejemplo.. 1 - actualización de archivos, 2 - consultas por email, 3 - descargo software... Etc.. Etc
Lo que deseo sacar son las estadísticas general por suscriptor.. Separarlos por servicio... Osea tendría que darle un count("acá iría la condición.. Contar solo el tipo 1"), luego count("acá iría la condición.. Contar solo el tipo 2").. Así sucesivamente..
***** mi codigo *****
$pre_query="select a.id_edicion,a.suscriptor as susc,b.razonsocial,b.flg_internet from descargas as a,suscriptores as b where b.codigo1-b.codigo2-b.codigo3-b.codigo4=a.suscriptor group by a.suscriptor limit 5";
$query=mysql_query($pre_query) or die(mysql_error());
while ($res=mysql_fetch_array($query)){
"aun no le aplico el count.."

2 Respuestas

Respuesta

Si es por ahorrar tiempo yo lo que haría seria tener en la tabla 'Suscriptores', un campo 'Suscriptor' tal como en la tabla 1. De la forma que lo haces ahora, concatenando campos para hacer la comparativa, estas forzando a concatenar esos campos en todos los suscriptores para después recién compararlos, es un trabajo muy demandante para el motor.
Si bien tener otro campo con información ya existente puede llevar al aumento del volumen de la BDD, al momento de hacer una comparación, el tiempo de ejecución va a ser bastante menor.

Respuesta
1
select b.suscriptor,
b.tipo,
a.razonsocial,
a.flg_internet,
count(*) as Veces
from descargas as b,suscriptores as a
where CONCAT_WS('-',a.codigo1,a.codigo2,a.codigo3,a.codigo4)=b.suscriptor
group by b.suscriptor, b.tipo, a.razonsocial,a.flg_internet
Order By b.suscriptor
limit 5";
Lo que tenias dudo que te funcionara ...
Hay tienes el código que me pedías, le he dado la vuelta a las tablas para ir más rapido. De todas formas el sistema de dividir la clave en cuatro campos ralentiza mucho el tema .. pero supongo que tus razones tendrás.
Un saludo y que te sirva de utilidad.
Para heces esto tienes que hacer varias select y unirlas con UNION, pero esto funciona en MySQL a partir de la 4.1
No tengo tiempo de ponerte un ejemplo pues estoy cerrando el año en mi curro.
Seria algo como
Select ....
From ...
Where ....
Group by ...
UNION
Select ....
From ...
Where ....
Group by ...
Order by
Limit
Una de las cosas a cumplir es que los campos de todas las select anidadadas sean del mismo tipo.
Espero ayudarte pero hasta el nuevo año no parare mucho por el ordenador.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas