Foros del Web » Programando para Internet » PHP »

Consulta a la base de datos

Estas en el tema de Consulta a la base de datos en el foro de PHP en Foros del Web. Hola. Mi pregunta es que de una lista de nombres de mi base de datos, quiero obtener uno al azar e imprimirlo en pantalla. Este ...
  #1 (permalink)  
Antiguo 12/03/2010, 13:27
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Consulta a la base de datos

Hola. Mi pregunta es que de una lista de nombres de mi base de datos, quiero obtener uno al azar e imprimirlo en pantalla. Este es el código:

Cita:
<?php
include_once("rank.php");
$link=conectar();
mysql_query ("SET NAMES 'utf8'");
$query = "SELECT nombre FROM english ORDER BY RAND()";
$resultado = mysql_query($query);
$row = mysql_fetch_assoc($resultado);
echo $row["nombre"];
?>
English es la tabla, nombre es la columna. Me dice:

Cita:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\misitio\rank\principal.php on line 16
Lo que pasa, es que no quiero que me tire una lista de nombres sino uno solo. Aun así tengo que usar un array con limit 1, etc.? Gracias
NOTA: La linea 16 es
Cita:
$row = mysql_fetch_assoc($resultado);
  #2 (permalink)  
Antiguo 12/03/2010, 13:30
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Consulta a la base de datos

El error es claro, mysql_fetch_assoc() espera un resource y tu l estas mandando un boolean, esto tipicamente es causado por un error en la consulta, utiliza mysql_error() para depurala.
  #3 (permalink)  
Antiguo 12/03/2010, 13:39
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Consulta a la base de datos

ok, gracias darkasecas. Una pregunta: Se me ocurre que:
Si cuento las filas con COUNT(*), luego tiro un numero al azar entre 1 y el numero COUNT(*) (suponete 1000 filas) y luego eligo con SELECT el nombre cuyo id=X (donde X es el numero al azar) entonces lo imprimira a ese solo (porque hay un solo id por fila, es unico). Es correcto el razonamiento?
  #4 (permalink)  
Antiguo 12/03/2010, 13:42
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Consulta a la base de datos

Si, es correcto, aunque tambien el codigo original(suponiendo que arregles el error de la consulta que tiene) te imprimira un solo registro (con o sin "limit 1", la diferencia es que con limit, el query devolvera solo 1 registro, y sin el, devolvera todos, aunque tu codigo solo imprima el primero de la "lista")
  #5 (permalink)  
Antiguo 12/03/2010, 13:44
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Consulta a la base de datos

Bien, gracias por la ayuda.
  #6 (permalink)  
Antiguo 12/03/2010, 13:59
 
Fecha de Ingreso: marzo-2010
Ubicación: Lima, Perú
Mensajes: 136
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Consulta a la base de datos

pero si le pones limit 1 solo te va a tirar un dato no tieens que hacer un array.
$result = (SELECT * FROM tabla ORDER BY RAND() LIMIT 1)

result tendra el valor obtenido al azar
  #7 (permalink)  
Antiguo 12/03/2010, 14:02
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Consulta a la base de datos

Cita:
Iniciado por dantrix Ver Mensaje
pero si le pones limit 1 solo te va a tirar un dato no tieens que hacer un array.
$result = (SELECT * FROM tabla ORDER BY RAND() LIMIT 1)

result tendra el valor obtenido al azar
Si vas a poner ejemplos al menos ponlos bien, ese codigo no tiene sentido :s
  #8 (permalink)  
Antiguo 12/03/2010, 14:12
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Consulta a la base de datos

Lo arregle, pero si bien no me marca errores, no sale como quiero:

Cita:
<?php
include_once("rank.php");
$link=conectar();
mysql_query ("SET NAMES 'utf8'");
?>

<?php
$query = "SELECT count(id) FROM english AS Total";
$row2=mysql_fetch_assoc(mysql_query($query));
$total_records = $row2['Total'];
mt_srand (time());
$x = rand(1,$total_records);
echo $total_records;
echo $x;
$query = "SELECT * FROM english WHERE id=$x";
$resultado = mysql_query($query);
while ($row = mysql_fetch_assoc($resultado))
{echo $row["nombre"]; }
mysql_free_result($resultado);
mysql_close($link);
?>
echo $total_records;: No imprime nada en pantalla
echo $x;: Imprime 1 (solo el numero 1, no es aleatorio)
echo $row["nombre"];: No imprime nada en pantalla
  #9 (permalink)  
Antiguo 12/03/2010, 14:15
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Consulta a la base de datos

Cita:
Iniciado por dantrix Ver Mensaje
pero si le pones limit 1 solo te va a tirar un dato no tieens que hacer un array.
$result = (SELECT * FROM tabla ORDER BY RAND() LIMIT 1)

result tendra el valor obtenido al azar
Si, pero como obtengo la variable? el Echo $nombre, porque no lo puedo obtener directamente.
Dices que imprima la consulta echo $result?
  #10 (permalink)  
Antiguo 12/03/2010, 14:16
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Consulta a la base de datos

1) en tu consulta estas usando una alias para la tabla, no para el campo que seleccionas.
2) $total_records no tiene valor
3)probablemetne no tienes un id=1 ?
  #11 (permalink)  
Antiguo 12/03/2010, 14:19
Avatar de principiantedelphp  
Fecha de Ingreso: febrero-2010
Mensajes: 160
Antigüedad: 14 años, 1 mes
Puntos: 1
Exacto id=1 existe, pero sin nombre (porque a la tabla la lleno desde un archivo de texto con /n (son nombres separados con un enter).
Voy a borrar el id=1, tomo a partir del id=2 y vemos.

Perfecto, me imprime el nombre. El problema es que no es aleatorio: siempre me imprime el id=2.
Estan fallando los numeros aleatorios. De cualquier manera, $total_records no tiene valor y eso me preocupa más.

Lo que puede pasar, es que al no tener valor $total_records, no me tira nada mas que el 2!

No encontré el error:
Cita:
$query = "SELECT count(id) FROM rank AS Total";
$row2=mysql_fetch_assoc(mysql_query($query));
$total_records = $row2['Total'];
El valor $total_records no es obtenido (no imprime en pantalla). Le cambie el nombre a la tabla, por si "english" era una palabra reservada, nunca se sabe. Nada, no pasa nada.

Listo, ya lo encontre

Última edición por GatorV; 12/03/2010 a las 15:13
  #12 (permalink)  
Antiguo 13/03/2010, 09:31
 
Fecha de Ingreso: marzo-2010
Ubicación: Lima, Perú
Mensajes: 136
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Consulta a la base de datos

Cita:
Iniciado por darkasecas Ver Mensaje
Si vas a poner ejemplos al menos ponlos bien, ese codigo no tiene sentido :s
Por le apuro me huevie de codigo....

con limit 1 solo jalas un valor, el problema creo que es la estructura de tu tabla

Etiquetas: Ninguno
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 05:50.