Foros del Web » Programando para Internet » PHP »

Consulta MySQL -> No devuelve todo lo que quiero!

Estas en el tema de Consulta MySQL -> No devuelve todo lo que quiero! en el foro de PHP en Foros del Web. Muy buenas, Duda de novato (hace apenas 1 mes que empecé a indagar en PHP+MySQL) Os pongo en situación, por si ayuda a aclarar el ...
  #1 (permalink)  
Antiguo 02/05/2008, 04:34
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 7 meses
Puntos: 0
Consulta MySQL -> No devuelve todo lo que quiero!

Muy buenas,

Duda de novato (hace apenas 1 mes que empecé a indagar en PHP+MySQL)
Os pongo en situación, por si ayuda a aclarar el problema

Tengo una tabla en una DB, llamémosle "tabla", en la que guardo una serie de registros sobre una Peña de Apuestas. Una de las columnas de esa tabla se llama "usuario", habiendo múltiples registros para 1 mismo usuario
Ya tengo todo el código preparado, y funcionando OK, para cada usuario. Para que se me entienda, todas las consultas dentro de ese código terminan "WHERE (usuario = '$usuario')"

Lo que necesito, y no consigo hacer, es crear una consulta inicial que recoja a todos los usuarios, y luego imagino que debería pasar un bucle para que se vaya ejecutando el código usuario por usuario

He probado a hacerlo así

Código:
$consulta = "SELECT * FROM tabla ORDER BY usuario ASC";
$result = $db->sql_query($consulta);
while ($row = $db->sql_fetchrow($result)) {
$usuario=$row['usuario'];

...
codigo
...

}
Pero el resultado es que sólo me devuelve 1 usuario, ejecuta el código para ese usuario, y no hace nada más

¿Dónde me estoy equivocando? ¿Alguna pista?
Muchas gracias!
  #2 (permalink)  
Antiguo 02/05/2008, 04:39
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Puede ser que dentro del bucle estes pisando el valor de la variable $result , por ejemplo al hacer la otra consulta la guardas en $result otra vez. Tipico fallo de copiapega.
  #3 (permalink)  
Antiguo 02/05/2008, 04:53
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Cita:
Iniciado por DarkJ Ver Mensaje
Puede ser que dentro del bucle estes pisando el valor de la variable $result , por ejemplo al hacer la otra consulta la guardas en $result otra vez. Tipico fallo de copiapega.
Llevas mucha razón... Era éso
Muchas gracias!

Ahora... una vez superado el primer escollo, viene el 2º problema

En la tabla, como comentaba, hay varios registros por cada usuario, y lo que me interesa a mí es que para cada usuario el bucle se ejecute 1 sola vez
¿Cómo lo podría hacer?

Por si ayuda muestro la página
http://www.falotron.com/modules.php?name=stakes_testing&file=usuario

Y el código entero
Código:
##
## Vamos recogiendo usuario a usuario
##

$consulta = "SELECT * FROM apuestas_OK ORDER BY usuario ASC";
$resultado = $db->sql_query($consulta);
while ($row = $db->sql_fetchrow($resultado)) {

$usuario=$row['usuario'];

##
## Recogemos el nº total de stakes
##

$sql = "SELECT usuario, procesada FROM apuestas_OK WHERE (usuario = '$usuario')";
$result = $db->sql_query($sql);
echo "<tr><td><b>$usuario</b></td>";
$cuento = mysql_num_rows($result);
echo "<td><font color=\"blue\">$cuento</font></td>";

##
## Recogemos el nº total de stakes > 2.99 + el Stake Medio en Apuestas Acertadas
##

$acertadas_ok = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake > '2.99') ";
$result = $db->sql_query($acertadas_ok);
$cuento1 = mysql_num_rows($result);
echo "<td><font color=\"green\"><b>$cuento1</b></font> ";

$acertadas_ok_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake > '2.99') ";
$result = $db->sql_query($acertadas_ok_avg);
$row = $db->sql_fetchrow($result);
$stake_medio1 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio1, 2);
echo "</I>)</td>";

##
## Recogemos el nº total de stakes < 3 + el Stake Medio en Apuestas Acertadas
##

$acertadas_ko = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake < '3.00') ";
$result = $db->sql_query($acertadas_ko);
$cuento2 = mysql_num_rows($result);
echo "<td><font color=\"red\"><b>$cuento2</b></font> ";

$acertadas_ko_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake < '3.00') ";
$result = $db->sql_query($acertadas_ko_avg);
$row = $db->sql_fetchrow($result);
$stake_medio2 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio2, 2);
echo "</I>)</td>";

##
## Recogemos el nº total de stakes < 3 + el Stake Medio en Apuestas Falladas
##

$falladas_ok = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake < '3.00') ";
$result = $db->sql_query($falladas_ok);
$cuento3 = mysql_num_rows($result);
echo "<td><font color=\"green\"><b>$cuento3</b></font> ";

$falladas_ok_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake < '3.00') ";
$result = $db->sql_query($falladas_ok_avg);
$row = $db->sql_fetchrow($result);
$stake_medio3 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio3, 2);
echo "</I>)</td>";

##
## Recogemos el nº total de stakes > 2.99 + el Stake Medio en Apuestas Falladas
##

$falladas_ko = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake > '2.99') ";
$result = $db->sql_query($falladas_ko);
$cuento4 = mysql_num_rows($result);
echo "<td><font color=\"red\"><b>$cuento4</b></font> ";

$falladas_ko_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake > '2.99') ";
$result = $db->sql_query($falladas_ko_avg);
$row = $db->sql_fetchrow($result);
$stake_medio4 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio4, 2);
echo "</I>)</td>";

##
## Se calcula el Coeficiente del peñista, según sus stats de stakes
##

$coef1 = $cuento1*$stake_medio1;
$coef2 = $cuento2*$stake_medio2;
$coef3 = $cuento3*$stake_medio3;
$coef4 = $cuento4*$stake_medio4;
echo "<td>";
echo $coef1-$coef2+$coef3-$coef4;
echo "</td>";
echo "</tr>";

}

##
## Cerramos la Tabla
##
  #4 (permalink)  
Antiguo 02/05/2008, 04:58
 
Fecha de Ingreso: enero-2008
Mensajes: 63
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Cita:
Iniciado por falotron Ver Mensaje
Llevas mucha razón... Era éso
Muchas gracias!

Ahora... una vez superado el primer escollo, viene el 2º problema

En la tabla, como comentaba, hay varios registros por cada usuario, y lo que me interesa a mí es que para cada usuario el bucle se ejecute 1 sola vez
¿Cómo lo podría hacer?

Por si ayuda muestro la página
http://www.falotron.com/modules.php?name=stakes_testing&file=usuario

Y el código entero
Código:
##
## Vamos recogiendo usuario a usuario
##

$consulta = "SELECT * FROM apuestas_OK ORDER BY usuario ASC";
$resultado = $db->sql_query($consulta);
while ($row = $db->sql_fetchrow($resultado)) {

$usuario=$row['usuario'];

##
## Recogemos el nº total de stakes
##

$sql = "SELECT usuario, procesada FROM apuestas_OK WHERE (usuario = '$usuario')";
$result = $db->sql_query($sql);
echo "<tr><td><b>$usuario</b></td>";
$cuento = mysql_num_rows($result);
echo "<td><font color=\"blue\">$cuento</font></td>";

##
## Recogemos el nº total de stakes > 2.99 + el Stake Medio en Apuestas Acertadas
##

$acertadas_ok = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake > '2.99') ";
$result = $db->sql_query($acertadas_ok);
$cuento1 = mysql_num_rows($result);
echo "<td><font color=\"green\"><b>$cuento1</b></font> ";

$acertadas_ok_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake > '2.99') ";
$result = $db->sql_query($acertadas_ok_avg);
$row = $db->sql_fetchrow($result);
$stake_medio1 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio1, 2);
echo "</I>)</td>";

##
## Recogemos el nº total de stakes < 3 + el Stake Medio en Apuestas Acertadas
##

$acertadas_ko = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake < '3.00') ";
$result = $db->sql_query($acertadas_ko);
$cuento2 = mysql_num_rows($result);
echo "<td><font color=\"red\"><b>$cuento2</b></font> ";

$acertadas_ko_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '2') AND (stake < '3.00') ";
$result = $db->sql_query($acertadas_ko_avg);
$row = $db->sql_fetchrow($result);
$stake_medio2 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio2, 2);
echo "</I>)</td>";

##
## Recogemos el nº total de stakes < 3 + el Stake Medio en Apuestas Falladas
##

$falladas_ok = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake < '3.00') ";
$result = $db->sql_query($falladas_ok);
$cuento3 = mysql_num_rows($result);
echo "<td><font color=\"green\"><b>$cuento3</b></font> ";

$falladas_ok_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake < '3.00') ";
$result = $db->sql_query($falladas_ok_avg);
$row = $db->sql_fetchrow($result);
$stake_medio3 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio3, 2);
echo "</I>)</td>";

##
## Recogemos el nº total de stakes > 2.99 + el Stake Medio en Apuestas Falladas
##

$falladas_ko = "SELECT stake FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake > '2.99') ";
$result = $db->sql_query($falladas_ko);
$cuento4 = mysql_num_rows($result);
echo "<td><font color=\"red\"><b>$cuento4</b></font> ";

$falladas_ko_avg = "SELECT AVG(stake) FROM apuestas_OK WHERE (usuario = '$usuario') AND (procesada = '3') AND (stake > '2.99') ";
$result = $db->sql_query($falladas_ko_avg);
$row = $db->sql_fetchrow($result);
$stake_medio4 = $row['AVG(stake)'];
echo "(<I>";
echo round($stake_medio4, 2);
echo "</I>)</td>";

##
## Se calcula el Coeficiente del peñista, según sus stats de stakes
##

$coef1 = $cuento1*$stake_medio1;
$coef2 = $cuento2*$stake_medio2;
$coef3 = $cuento3*$stake_medio3;
$coef4 = $cuento4*$stake_medio4;
echo "<td>";
echo $coef1-$coef2+$coef3-$coef4;
echo "</td>";
echo "</tr>";

}

##
## Cerramos la Tabla
##
al seleccionar el usuario hazlo con el DISTINCT
  #5 (permalink)  
Antiguo 02/05/2008, 05:04
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Cita:
Iniciado por kitosss Ver Mensaje
al seleccionar el usuario hazlo con el DISTINCT
Cuando te estaba respondiendo me has cambiado la respuesta! xD
Con el "GROUP BY usuario" ha funcionado! Muchas gracias! Qué velocidad, oiga
  #6 (permalink)  
Antiguo 02/05/2008, 05:12
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Seguimos, para rizar el rizo, y finalizar el módulo, aunque esta duda ya no tiene nada que ver con el título del topic (no puedo cambiar el título...)


Llegados a este punto tengo esta tabla
http://www.falotron.com/modules.php?name=stakes_testing&file=usuario


¿Cómo hago para poder ordenarla según los valores "COEF."?
Me refiero a hacer click en "COEF." y que la tabla se ordene


Muchas gracias de nuevo!

Última edición por falotron; 02/05/2008 a las 05:28
  #7 (permalink)  
Antiguo 02/05/2008, 09:33
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Hi !

Puedes enviar una variable por URL del tipo "coef=ASC" o algo de ese estilo, y luego preguntas si la variable esta seteada, si lo está entonces ejecutas una consulta y sino la que ya tenias. Algo asi:

Código PHP:
$ordenar $_GET["coef"];

if (isset(
$ordenar)) {
    
$SQL "SELECT * FROM tabla ORDER BY coeficiente ASC"// o puede ser DESC
}else{
    
$SQL "SELECT * FROM tabla";

No puse nombres ni nada especifico, es para que te des una idea.
Espero te sirva!

-ByE-
  #8 (permalink)  
Antiguo 02/05/2008, 09:41
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Cita:
Iniciado por Proguri Ver Mensaje
Hi !

Puedes enviar una variable por URL del tipo "coef=ASC" o algo de ese estilo, y luego preguntas si la variable esta seteada, si lo está entonces ejecutas una consulta y sino la que ya tenias. Algo asi:

Código PHP:
$ordenar $_GET["coef"];

if (isset(
$ordenar)) {
    
$SQL "SELECT * FROM tabla ORDER BY coeficiente ASC"// o puede ser DESC
}else{
    
$SQL "SELECT * FROM tabla";

No puse nombres ni nada especifico, es para que te des una idea.
Espero te sirva!

-ByE-
Mmmmm
Edito mi mensaje, que no lo había entendido...

Voy a probarlo... ;)
  #9 (permalink)  
Antiguo 02/05/2008, 09:59
 
Fecha de Ingreso: septiembre-2006
Mensajes: 68
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Consulta MySQL -> No devuelve todo lo que quiero!

Cita:
Iniciado por falotron Ver Mensaje
Mmmmm
Edito mi mensaje, que no lo había entendido...

Voy a probarlo... ;)
Lo he probado y no funciona...
Aclarar que coef es el resultado de una operación matemática entre elementos de la DB, pero no está en la DB en sí... ¿Será por éso?

El código que he añadido es este...
Código PHP:
$ordenar $_GET['$coef'];

if (isset(
$ordenar)) {
    
$consulta "SELECT * FROM apuestas_OK GROUP BY usuario ORDER BY coef ASC"// o puede ser DESC
}else{
    
$consulta "SELECT * FROM apuestas_OK GROUP BY usuario ORDER BY usuario ASC";

Cuando coef es...

Código PHP:
##
## Se calcula el Coeficiente del peñista, según sus stats de stakes
##

$coef1 = ($cuento1*$stake_medio1/10);
$coef2 $cuento2*$stake_medio2/10;
$coef3 = ($cuento3*$stake_medio3/10);
$coef4 $cuento4*$stake_medio4/10;
echo 
"<td>";
$coef $coef1-$coef2+$coef3-$coef4;
echo 
round($coef2); 
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:22.