COmo puedo hacer una consulta a la BD que me seleccione los campos por id de forma aleatoria.
Saludos
| |||
Hola, El metodo de McManaman solo tiene un fallo. Que tines que saber el numero de registros, y que no puedes haber borrado ningun registro (necesitas que esten todos los valores). El metodo mas o menos estandard de hacer lo que pides es con SELECT * FROM tabla ORDER BY RAND() Lo que pasa es que puede ser poco aleatoria (el problema de la aleatoriedad en informatica). Saludos.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
Saludos Tengo lo siguiente: $query = "SELECT * FROM " . TBL_IMGP . " WHERE status_imgp = '1' ORDER BY RAND()"; Pero siempre me trae el mismo valor. Recargo y recargo la página y siempre me trae el mismo valor. Gracias
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. |
| ||||
José Molina Lo primero que puede estar pasando es que realmente sólo exista un registro en tu bd DONDE el campo status_imgp='1'... Reynier: Si vas a necesitar hacer eso varias veces, lo que puedes hacer es guardar los resultados en un array y utilizar funciones de array así: while ($row[]=mysql_fetch_array($result)){ //lo que sea } Luego puedes hacer un $indice=array_rand($row); Eso coge un índice aleatorio de tu array $row Lo utilizas así: echo $row[$indice]['campo']; En realidad creo que me mandé con una pastrulada... te iba a decir que si necesitas eso varias veces, guardes el array $row en una sesión y lo llamas desde cualquier parte.. así siempre te da un registro aleatorio sin hacer nuevamente la consulta a la BD... pero creo que sería demasiado si tienes muchos registros... No sé.. es una idea... y las opiniones nunca están de más ¿no? xD... Saludos ![]() |
| ||||
Saludos Efectivamente el status_imgp es para activar o no las imágenes que quiero aparezcan. Para que tengan una idea veanlo aquí: www.inserca.com/index_new.php Les estoy imprimiendo el query y el ID de la foto. La idea es que cada vez que recarguen me traiga una foto distinta. En mi web server local funciona perfectamente, pero cuando lo subo ya no. La db esta construida con el código que me genero la misma db que uso localmente, pensando que quizas era el tipo de dato que estaba usando, pero no es eso. También pense que sería algo con el servidor, que no tendría activo ese módulo o esa función RAND(), pero probe con RAND(a,b) usando los valores de id de las imágenes y comenzo a funcionar. Pero como aquí mismo se aclaro, eso no me funciona para varios registros no consecutivos, o si borro registros consecutivos. Gracias a todos.
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. Última edición por José Molina; 17/11/2003 a las 10:42 |
| ||||
![]() Saludos Resulta que el mismo query lo estoy usando en las secciones del home: -Los Servicios Y los dos bloques inferiores. Estos si se cambian aleatoriamente al recargar la página. Ahora se puso peor mi incognita.... Porque si funciona en las otras y no en la primera (la que estoy imprimiendo en pantalla www.inserca.com/index_new.php) ?? Gracias
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. |
| |||
Realmente si te funciona. Tiene la ligera tendecia de sacar mas de un 90% el ID 3, pero he llegado a ver el ID 5. El problema del RAND() es que con un conjunto bajo de registros, tiende a poner el mismo el primero. Al menos yo he observado que si tienes mas de 10 registros, empieza a notarse mas el cambio. Saludos.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
Saludos Pero si lograstes ver una foto distinta?? Si es así entonces si esta funcionando ?? Gracias
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. |
| ||||
Saludos. Estoy nuevamente por aquí por lo siguiente. Si bien es cierto que la imagen funciona con el RAND () despues de las 20 recargas (apróx.) resulta que es como que muchas recargas para ver una nueva imágen y apenas aparece esa nueva imágen, en la siguiente recarga, coloca la misma con la que empezo. En la db hay más de 11 imágenes disponibles, así que me parece debo utilizar otro método para que aparezcan las imágenes al azar. Intente de la manera como hace referencia jpinedo : while ($db->(next_record()){ $indice = $indice . " " . $campo } $indice=array_rand($indice); Pero me dice que array_rand debe tener otro parámetro Me hace falta algo en realidad pero no encuentro que será. Ideas ?? Gracias
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. |
| |||
Revisa www.php.net/array_rand . No necesita otro parametro, sino otro tipo de parametro. El parametro que le pases debe ser un array. Y tu le estas pasando una cadena. Si haces algo como: Código PHP: Saludos. PD: Esto, me suena la primera nota de los usuarios en la pagina del manual de array_rand(), ¿de quien sera? ![]()
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
Saludos. Excelente explicación josemi. Gracias Si funciona .. casi .. perfectamente. Qué sucede?? el id de cada imágen es un int de 2 digitos: - 1 - 2 - 3 - 12 - 19 Ahora, cuando el array_rand($indice) captura por ejemplo la posición 4 que debería ser el "12", resulta que me captura un "1" e igualmente pasa en el "19"... ???? (Puedes verlo en www.inserca.com/index_new.php) Gracias
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. Última edición por José Molina; 19/11/2003 a las 08:21 |
| |||
Mejor pon tu el trozo de codigo que usas actualmente, porque me extraña ese comportamiento. Espera, he vuelto ha revisar el manual y pone Cita: Es decir, que devuelve el indice del array. Y me parece que tue estas pasando a tu query el valor devuelto por array_rand(), cuando tendrias que estar pasando el valor del array para el indice devuelto por array_rand().If you are picking only one entry, array_rand() returns the key for a random entry. Otherwise, it returns an array of keys for the random entries. This is done so that you can pick random keys as well as values out of the array. Suerte.
__________________ Josemi Aprendiz de mucho, maestro de poco. |
| ||||
Saludos while ($db->next_record()) { $indice[] = $db->f("id_imagen"); } $indice_final = array_rand($indice); $query = "SELECT * FROM " . TBL_IMGP . " WHERE status_imgp = 1 AND id_imagen = '". $indice_final . "'"; Ese es el código
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. |
| ||||
Saludos Lo modifique a este: while ($db->next_record()) { $indice[] = $db->f("id_imagen"); } $indice_final = array_rand($indice); $query = "SELECT * FROM " . TBL_IMGP . " WHERE status_imgp = 1 AND id_imagen = '". $indice[$indice_final] . "'"; Creo que ahora si lo he hecho como debe ser Gracias
__________________ José Molina La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente. |