Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Acceder a un valor concreto de un array con valores de una base de datos

Estas en el tema de Acceder a un valor concreto de un array con valores de una base de datos en el foro de PHP en Foros del Web. Buenos días a todos, Estaba haciéndome mi primer pequeño programa que combina una base de datos sencilla con mysql y php. Pero tengo un problema ...
  #1 (permalink)  
Antiguo 24/08/2013, 04:41
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 10 meses
Puntos: 4
Pregunta Acceder a un valor concreto de un array con valores de una base de datos

Buenos días a todos,

Estaba haciéndome mi primer pequeño programa que combina una base de datos sencilla con mysql y php. Pero tengo un problema intentando guardar un valor concreto de un array para poder operar con este.

Más gráficamente, por pantalla hago que me muestre lo siguiente (para comprobar que realmente guarde algún valor):

Se han recuperado 1filas

Array
(
[0] => 110
[1] => Onil
)


Mi objetivo es coger ese 110 y guardarlo en una variable para poder operar con este en futuras operaciones matemáticas.

Me he repasado el manual y no he conseguido sacar nada porque todo lo que encuentro son con arrays sencillas que no guardan valores de una base de datos, ojala podáis aconsejarme un poco.

Y el código que tengo hasta el momento es el siguiente:


Código PHP:
Ver original
  1. $expe_q=mysql_query("SELECT SUM(quests_valor),pua.pua_nom FROM  fan,pua WHERE  pua.pua_nom ='Onil'");
  2.         if(!$expe_q)
  3.         {
  4.         echo '<p> Error ejecutando la consulta </p>';
  5.         echo mysql_error();
  6.         exit;
  7.         }
  8.        
  9.         echo "<p> Se han recuperado ". mysql_num_rows($expe_q) . 'filas</p>';
  10.         echo '<pre>';
  11.            
  12.         while($Fila=mysql_fetch_row($expe_q))
  13.             print_r($Fila);
  14.             echo '</pre>';

En cualquier caso, gracias por vuestro tiempo :)
  #2 (permalink)  
Antiguo 24/08/2013, 10:32
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Si tu valor se encuentra en la variable ($Fila) y fila contiene

Array
(
[0] => 110
[1] => Onil
)

entonces para obtener el valor 110 harías esto:

$valor=$Fila[0];

aunque de todos modos es posible usar el valor de forma directa sin traspasar a otra variable.
  #3 (permalink)  
Antiguo 25/08/2013, 04:39
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Cita:
Iniciado por ocp001a Ver Mensaje
Si tu valor se encuentra en la variable ($Fila) y fila contiene

Array
(
[0] => 110
[1] => Onil
)

entonces para obtener el valor 110 harías esto:

$valor=$Fila[0];

aunque de todos modos es posible usar el valor de forma directa sin traspasar a otra variable.
Buenas ocp001a,

Gracias por tu respuesta. He probado de hacer lo que me comentabas y no he obtenido resultado de momento (aunque entiendo la lógica de lo que me comentas). Para probar que me funcionara he intentado imprimirlo con un echo pero no me aparece nada por pantalla. También he probado de operar matemáticamente con este sumándole, por ejemplo 50, y en pantalla solo me aparecía 50. O sea que parece que no coge el valor (amenos a primera vista y a ojos de novato (yo jeje)).

¿Que estoy haciendo mal? Por qué no consigo verlo :(
  #4 (permalink)  
Antiguo 25/08/2013, 05:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Empecemos por el principio: Para que la print_r() no devuelva la estructura del array como deseas mostrarla, el array debería estar vacío, es decir, ser nulo. Y en ese caso saldría por el error.
La primera pregunta es: ¿Está mostrando algo en pantalla?

En segundo lugar, ¿qué devuelve esto, si lo ejecutas por ejemplo con el phpMyadmin, en forma manual:
Código MySQL:
Ver original
  1. SELECT SUM(quests_valor),pua.pua_nom
  2. FROM  fan,pua
  3. WHERE  pua.pua_nom ='Onil'
Eso, suponiendo que no esté devolviendo un error, ya que estás usando una función agrupada, sin usar GROUP BY, lo que debería dispararlo.

Empecemos por estos dos temas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 25/08/2013, 06:19
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Empecemos por el principio: Para que la print_r() no devuelva la estructura del array como deseas mostrarla, el array debería estar vacío, es decir, ser nulo. Y en ese caso saldría por el error.
La primera pregunta es: ¿Está mostrando algo en pantalla?

En segundo lugar, ¿qué devuelve esto, si lo ejecutas por ejemplo con el phpMyadmin, en forma manual:
Código MySQL:
Ver original
  1. SELECT SUM(quests_valor),pua.pua_nom
  2. FROM  fan,pua
  3. WHERE  pua.pua_nom ='Onil'
Eso, suponiendo que no esté devolviendo un error, ya que estás usando una función agrupada, sin usar GROUP BY, lo que debería dispararlo.

Empecemos por estos dos temas.
Hola de nuevo gnzsoloyo,

Respondiendo a la primera pregunta, a no ser que haga el código citado a continuación no me muestra nada por pantalla:

Código PHP:
Ver original
  1. <?php
  2.     include("conexio.php");
  3. ?>
  4. <?php
  5.         $expe_q=mysql_query("SELECT SUM(quests_valor),pua.pua_nom FROM  fan,pua WHERE  pua.pua_nom ='Onil'");
  6.         if(!$expe_q)
  7.         {
  8.         echo '<p> Error executant la consulta </p>';
  9.         echo mysql_error();
  10.         exit;
  11.         }
  12.        
  13.         echo "<p> S'han recuperat ". mysql_num_rows($expe_q) . 'files</p>';
  14.         echo '<pre>';      
  15.        
  16.         while($Fila=mysql_fetch_row($expe_q))
  17.             print_r($Fila);
  18.             //echo $Fila("SUM(quests_valor)");
  19.         echo '</pre>';
  20.        
  21.         $valor=$Fila[0];
  22.         echo $valor;
  23. ?>

Como veis en la consulta utilice el SUM para sumar todos los valores que cumplieran la condición ='Onil'. Luego lo que pretendía es coger ese valor y almacenarlo en una variable para poder operar con este. Como no sabía cómo hacerlo estuve mirando libros y lo pase por este array que veis para poder coger luego solo ese 110. Pero no sé si me estoy complicando demasiado o si hay una alternativa más sólida e útil.

Respondiendo a la segunda pregunta, si lo ejecuto de forma manual me devuelve dos columnas con una fila con 110 en la primera y el nombre Onil en la otra.

Seguro que el error es para no dirigirme la palabra pero en mi defensa diré que estoy constantemente estudiando libros para así poder aportar soluciones a este foro también :).
  #6 (permalink)  
Antiguo 25/08/2013, 07:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Yo me pregunto (los expertos dirán), si esa alternancia entre apóstrofos (') y comillas (") no estará dando resultados extraños...
No debería, pero al menos regularizaría el código así:

Código PHP:
Ver original
  1. <?php
  2.     include("conexio.php");
  3. ?>
  4. <?php
  5.         $expe_q=mysql_query("SELECT SUM(quests_valor)  valor, pua.pua_nom FROM  fan, pua WHERE  pua.pua_nom ='Onil'");
  6.         if(!$expe_q)
  7.         {
  8.         echo "<p> Error executant la consulta </p>";
  9.         echo mysql_error();
  10.         exit;
  11.         }
  12.        
  13.         echo "<p> S'han recuperat ". mysql_num_rows($expe_q) . " files</p>";
  14.         echo "<pre>";
  15.         while($Fila=mysql_fetch_row($expe_q))
  16.             {print_r($Fila);
  17.             //echo $Fila("valor");
  18.             }
  19.         echo "</pre>";
  20.         $valor=$Fila[0];
  21.         echo $valor;
  22. ?>
El manual también expresa que no debe haber nada luego del ";" final, ni espacios ni tabulaciones. Habría que ver si eso no molesta, ya que al menos una linea tenía espacios después.
le agregué algunos detalles menores, pero veamos qué pasa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 25/08/2013, 07:25
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Yo me pregunto (los expertos dirán), si esa alternancia entre apóstrofos (') y comillas (") no estará dando resultados extraños...
No debería, pero al menos regularizaría el código así:

Código PHP:
Ver original
  1. <?php
  2.     include("conexio.php");
  3. ?>
  4. <?php
  5.         $expe_q=mysql_query("SELECT SUM(quests_valor)  valor, pua.pua_nom FROM  fan, pua WHERE  pua.pua_nom ='Onil'");
  6.         if(!$expe_q)
  7.         {
  8.         echo "<p> Error executant la consulta </p>";
  9.         echo mysql_error();
  10.         exit;
  11.         }
  12.        
  13.         echo "<p> S'han recuperat ". mysql_num_rows($expe_q) . " files</p>";
  14.         echo "<pre>";
  15.         while($Fila=mysql_fetch_row($expe_q))
  16.             {print_r($Fila);
  17.             //echo $Fila("valor");
  18.             }
  19.         echo "</pre>";
  20.         $valor=$Fila[0];
  21.         echo $valor;
  22. ?>
El manual también expresa que no debe haber nada luego del ";" final, ni espacios ni tabulaciones. Habría que ver si eso no molesta, ya que al menos una linea tenía espacios después.
le agregué algunos detalles menores, pero veamos qué pasa.
Lo acabo de ejecutar y me da el mismo resultado :S:

Se han recuperado 1 filas

Array
(
[0] => 110
[1] => Onil
)


He utilizado tu código por lo que me comentabas de los espacios en blanco y tabulaciones por si acaso. Lo he estado intentando por mi cuenta mientrastanto y tampoco he sacado nada.

Teóricamente debería devolverme un valor si le marco la posición del array deseado ¿no?
  #8 (permalink)  
Antiguo 25/08/2013, 07:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Ok, ahora me queda un poco más claro lo que estás intentando lograr, y de dónde podría adar tu problema.
El tema es un asunto muy usual en otros lenguajes, y suele pasarle a los que se inician: Es de cómo funciona el WHILE...

El while realiza una iteración tal que al principio evalúa si el resultado es TRUE o FALSE. pero para hacerlo en este caso, cada nuevo ciclo posiciona el puntero en el siguiente, y sale cuando es false. Esto último implica que cuando sale del while, el array es nulo.
¿Se entiende?
Por un lado hay un error de lógica: Si la consulta devolverá un único registro, el while es innecesario. Sólo tiene sentido si devuelve N registros.
Por otro lado, la carga de la variable, para evitar el array nulo debe hacerse dentro del while y no más allá de él.

Esto implica que tienes dos soluciones simples posibles:
Código PHP:
Ver original
  1. while($Fila=mysql_fetch_row($expe_q))
  2.             {print_r($Fila);
  3.            $valor=$Fila[0];
  4.             }
  5.         echo "</pre>";
  6.         echo $valor;

o simplemente:
Código PHP:
Ver original
  1. $Fila=mysql_fetch_row($expe_q);
  2. $valor=$Fila[0];
  3. echo $valor;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 25/08/2013, 08:39
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Voy a pasar de darte las gracias a decirte que te haría un monumento gnzsoloyo, muchas gracias por tu tiempo!¡Solucionado!

Por lo que he entendido, si quisiera que me mostrara una lista con todos los resultados utilizaría el while (y claro está, sin el SUM).
  #10 (permalink)  
Antiguo 25/08/2013, 10:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Cita:
Por lo que he entendido, si quisiera que me mostrara una lista con todos los resultados utilizaría el while (y claro está, sin el SUM).
Si, es correcto, pero ese caso sólo se daría si la consulta devolviese una tabla de resultados, y no un registro único. Y para ello la condición del WHERE debería devolver N registros, y para lograrlo no deberías consultar por un campo que sea clave primaria.
Además, una consulta que devuelva subtotales por item, que sería el caso, requiere sí o sí que se use un GROUP BY para obtener los subtotales mencionados.
¿Se entiende?
En decir, debes resolver ambas lógicas al mismo tiempo: En SQL la consulta y PHP lo que tenga que ver con el procesamiento de los resultados de la consulta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 25/08/2013, 10:38
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 12 años, 10 meses
Puntos: 4
Respuesta: Acceder a un valor concreto de un array con valores de una base de datos

Si, ahora que ya lo tengo más claro ya sé por donde continuar practicando.

Gracias de nuevo :)

Etiquetas: mysql, select, sql, valor, variable
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:53.