Comunidad de diseño web y desarrollo en internet online

Consulta mysql porcentajes.

Citar            
MensajeEscrito el 28 Mar 2011 10:43 pm
Saludos, tengo una pequeña duda respecto a una consulta MYSQL y PHP, necesito hacer lo siguiente:

Tengo la tabla personas la cual es de este modo:


id | persona | cliente | visitado
1 Juan 765412 si
2 Juan 897655 si
3 Juan 891235 no
4 Juan 894425 no
5 Juan 893425 si
6 Pedro 896325 si
7 Pedro 897655 si
8 Pedro 897655 no

El problema es el siguien, necesito crear una consulta que muestre la efectividad de la persona respecto a las visitas de los clientes

Entiendo como resolver el problema, pero no he podido crearla en una consulta MYSQL.

Tengo que presentar el problema de esta forma:

persona | efectividad
Juan 87%
Pedro 70%

Saludos

Por virusbyte

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Mar 2011 03:13 am
Suponiendo que tu tabla se llame "tabla" la solucion en una sola consulta a la BD seria esta:

Código MySQL :

SELECT ROUND((((SELECT COUNT(*) FROM tabla WHERE visitado="si" AND persona=main.persona)*100)/count(*)),2) AS efectividad, persona FROM tabla AS main GROUP BY persona;


pruebalo y de ahi nos cuentas como te fue

COPY, PASTE, PLAY AND ENJOY

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 29 Mar 2011 04:46 am
lo probe, pero me sale este error:

Error

consulta SQL:

SHOW KEYS FROM

MySQL ha dicho:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Por virusbyte

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Mar 2011 11:20 am
estas seguro q copiaste bien, de donde salio el "SHOW KEYS FROM"

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 29 Mar 2011 03:25 pm
Amigo, te agradesco, el error lo cometi yo, pero funciona perfecto de verdad muchas gracias, pero ahora otra duda.. como muestro estos datos en PHP?

Saludos.

Por virusbyte

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Mar 2011 03:32 pm
ya ok te complteo la tarea xD:

Código PHP :

<?php
$q_A = "SELECT ROUND((((SELECT COUNT(*) FROM tabla WHERE visitado="si" AND persona=main.persona)*100)/count(*)),2) AS efectividad, persona FROM tabla AS main GROUP BY persona";
$A = mysql_query($q_A) or die (mysql_error());
$r_A = mysql_fetch_assoc($A);
echo "<table><thead><tr><th>Persona</th><th>Efectividad</th></tr></thead><tbody>";
do {
  echo "<tr><td>".$r_A['persona']."</td><td>".$r_A['efectividad']."</td></tr>";
} while($r_A = mysql_fetch_assoc($A));
echo "</tbody></table>";

Listo con eso tienes un simpática tabla con los valores de la consulta, encabezados incluidos. Pruebalo y de ahi nos cuentas.

COPY, PASTE, PLAY AND ENJOY.

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome
Citar            
MensajeEscrito el 29 Mar 2011 07:06 pm
Cuidado con esas funciones agregadas (COUNT) y las subconsultas, son MUY costosas para MySQL.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 29 Mar 2011 09:18 pm
Pero de que otra forma se podria hacer para optimizar la carga?, lo otro me pidieron que cada persona se divida por oficina, es decir JUAN, PEDRO son de la oficina 1 y HECTOR oficina 2, eso lo ligue a un select, el problema es que el valor lo pasa por post, pero.. en la consulta no me toma el where, osea lo deje de este modo

$q_A = "SELECT ROUND((((SELECT COUNT(*) FROM tabla WHERE visitado="si" AND persona=main.persona AND numOficina = '$oficina')*100)/count(*)),2) AS efectividad, persona FROM tabla AS main GROUP BY persona";

Pero igual me arroja todos los datos de la tabla y no solo los de las oficinas que estoy buscando.

Saludos! y de verdad muchas gracias

Por virusbyte

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Mar 2011 09:23 pm
para eso la sentencia seria

Código MySQL :

SELECT ROUND((((SELECT COUNT(*) FROM tabla WHERE visitado="si" AND persona=main.persona)*100)/count(*)),2) AS efectividad, persona FROM tabla AS main WHERE numOficina=$_POST['oficina'] GROUP BY persona


si te lo pasan por GET reemplazas $_POST por $_GET si lo queires dejar abierto para ambas opciones (no recomendable) pones $_REQUEST

Por NeoCesar

Claber

1415 de clabLevel

14 tutoriales

Genero:Masculino  

Algun lugar dentro de la Matrix (Lima - Perú)

chrome

 

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