Foros del Web » Programando para Internet » PHP »

Order By Rand() Limit 1

Estas en el tema de Order By Rand() Limit 1 en el foro de PHP en Foros del Web. Hola, tengo un problema con esta instruccion: $_pagi_sql2 = ("SELECT * FROM mapas ORDER BY RAND() LIMIT 1") or die(mysql_error()); No se si la estoy ...
  #1 (permalink)  
Antiguo 30/03/2007, 17:54
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Order By Rand() Limit 1

Hola, tengo un problema con esta instruccion:

$_pagi_sql2 = ("SELECT * FROM mapas ORDER BY RAND() LIMIT 1") or die(mysql_error());

No se si la estoy usando mal o que, pero me lanza este error:

Error en la consulta de conteo alternativo de registros: . Mysql dijo: 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 '() LIMIT 1' at line 1



No entiendo porque no me la acepta, alguien ve algun error?
  #2 (permalink)  
Antiguo 30/03/2007, 17:59
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: Order By Rand() Limit 1

LIMIT 0,1

Asi solo sacaras un resultado ;)
__________________
Sin Ideas
  #3 (permalink)  
Antiguo 30/03/2007, 18:09
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Con 0,1 me da Error en la consulta limitada:...
  #4 (permalink)  
Antiguo 30/03/2007, 19:05
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: Order By Rand() Limit 1

o.ó...

Código PHP:
$_pagi_sql2 mysql_query("SELECT * FROM mapas ORDER BY RAND() LIMIT 0,1") or die(mysql_error()); 
A mi el codigo SQL, tal como lo puse, funciona perfecto..

SELECT * FROM tabla ORDER BY RAND( ) LIMIT 0 , 1
__________________
Sin Ideas
  #5 (permalink)  
Antiguo 30/03/2007, 19:12
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Si hago la consulta en phpmyadmin me dice que está bien, pero si la ejecuto en la web, me lanza error :s


Error en la consulta de conteo alternativo de registros: . Mysql dijo: 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 'Resource id #19' at line 1


Yo veo que la consulta está bien hecha porque en phpmyadmin me devuelve un registro al azar, pero en la web no.

El script recibe variables por get, y una de ellas es $resultados, entonces hago:

if ($resultados == 0){

$_pagi_sql2 = mysql_query("SELECT * FROM mapas ORDER BY RAND() LIMIT 0,1") or die(mysql_error());
$resultados = 1;
}


:s No parece haver nada raro no?
  #6 (permalink)  
Antiguo 30/03/2007, 20:07
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: Order By Rand() Limit 1

Pues no, no noto nada raro.. eso de Resource id #19 me suena a que antes tienes alguna consulta mal hecha o algo asi.. podrias poner el codigo de donde esta dando el error?
__________________
Sin Ideas
  #7 (permalink)  
Antiguo 31/03/2007, 05:19
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Pues el error que me da es ese, no me sale nada mas :S

te pongo un poco de codigo, es un script que recibe varialbes por get:

Código PHP:
$_pagi_sql2 = ("SELECT * FROM mapas ORDER BY 'id' DESC") or die(mysql_error());
    
$_pagi_propagar2 = array("orden","modalidad","autor","tipo","visualizar","uploader","resultados");
    
    if (
$resultados == 0){
    
        
$_pagi_sql2 mysql_query("SELECT * FROM mapas ORDER BY RAND() LIMIT 0,1") or die(mysql_error()); 
        
$resultados 1;
    }
    else{

        if ((
$modalidad == "Todas") && ($visualizar == "Ascendiente")){
    
            if ((
$autor != "") && ($uploader != "")){
            
                
$_pagi_sql2 = ("SELECT * FROM mapas WHERE (extension='$tipo1' OR extension='$tipo2') AND autor LIKE '%$autor%' AND uploader LIKE '%$uploader%' ORDER BY '$orden'") or die(mysql_error());
            }
            else ....... 

Si resultados es 0, ejecuta la consulta en random, sino, ejecuta la consulta dependiendo de los parametros.
  #8 (permalink)  
Antiguo 31/03/2007, 05:24
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Si quito el limit la hace bien, pero con limit no :S
  #9 (permalink)  
Antiguo 31/03/2007, 12:34
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: Order By Rand() Limit 1

Pues si, la verdad es que es raro.. la consulta esta bien puesta, ya que como dices, al ponerla en el phpmyadmin te funciona bien.. uhm.. prueba poniendo antes de esa linea un mysql_free_result($_pagi_sql2);

O espera.. estas usando el paginator? Si es asi, entonces el mysql_query no va ahi.. seria solo:
Código PHP:
$_pagi_sql2 "SELECT * FROM mapas ORDER BY RAND() LIMIT 0,1"
Creo o.o
__________________
Sin Ideas
  #10 (permalink)  
Antiguo 31/03/2007, 17:03
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Jeje es como lo tengo puesto ahora, pero que va. :S
  #11 (permalink)  
Antiguo 01/04/2007, 15:44
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Alguna idea?
  #12 (permalink)  
Antiguo 01/04/2007, 18:43
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: Order By Rand() Limit 1

Sorry, he andado algo ocupado este dia x_x.. uhm, no se me ha ocurrido cual pueda ser el problema, pero me gustaria ver todo el codigo que tienes.. si es muy largo, no lo postees aqui (o no se, puedes si quieres).. pero de momento sigo iwal q antes, sin saber q puede ser el problema
__________________
Sin Ideas
  #13 (permalink)  
Antiguo 02/04/2007, 11:35
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Es que el codigo es tochisimo... y no creo que influya en esa consulta ya que esta puesta igual que las demás pero con el rand.

Esperare a ver si alguien sabe por donde la estoy liando.

Gracias ;)
  #14 (permalink)  
Antiguo 05/04/2007, 08:28
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

El rand me lo hace bien si quito el limit, pero si añado LIMIT 1, entonces se le va la pinza.

Puede que tenga algo que ver con la version de mysql o algo? :S
  #15 (permalink)  
Antiguo 05/04/2007, 14:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Order By Rand() Limit 1

Que versión tenes (la sabes con un select version() )? A mi me funciona, y nunca escuche nada de limitaciones "order by rand + limit". Ponele al or die algo como:

Código PHP:
or die ( "Error el archivo "__FILE__ ." en la línea " __LINE__ " MYSQL error N° " mysql_errno " <br /> Mysql Str" mysql_error() ); 
Así estas seguro donde se esta produciendo el error.


Referencias de errores: http://dev.mysql.com/doc/refman/5.0/...-handling.html
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #16 (permalink)  
Antiguo 11/04/2007, 10:54
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Hola Nicolaspar.

Pues he probado lo que has dicho y queda asi la cosa:

Código PHP:
$_pagi_sql2 = ("SELECT * FROM mapas ORDER BY RAND() LIMIT 1") or die ("Error el archivo "__FILE__ ." en la línea " __LINE__ " MYSQL error N° " mysql_errno " <br /> Mysql Str" mysql_error()); 
Pero no lanza ese error :S:S, lanza el mismo de antes.

Código PHP:
Error en la consulta limitadaSELECT FROM mapas ORDER BY RAND() limit 1 LIMIT 0,1. Mysql dijoYou have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0,1' at line 1 
Eso no es muy raro tambien?
  #17 (permalink)  
Antiguo 11/04/2007, 11:16
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 20 años, 10 meses
Puntos: 3
Re: Order By Rand() Limit 1

si estas usando el Paginator para que quieres limitar la busqueda en 1 si el mismo paginator tiene la sentencia de cuantos registros quieres por pagina? es ahi donde tienes el error del Limit.. osea, lo estas invocando 2 veces en la consulta, deja todo como:

Código PHP:
$_pagi_sql2 "SELECT * FROM mapas ORDER BY RAND()"
y si aun deseas limitar la busqueda a 1 registro (algo que aun no comprendo) busca la sentencia del paginator y le colocas 1:

Código PHP:
/* Esto es en el paginator */
$_pagi_cuantos1
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!
  #18 (permalink)  
Antiguo 11/04/2007, 12:31
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

A pues puede ser por eso ahora que lo dices.

El paginator lo que hace es mostrar "x" resultados... bueno que te voy a decir que no sepas, lo que me interesa a mi es que solo de un resultado, no que pagine de 1 en 1, sinó que únicamente muestre un solo registro.

Es posible con el paginador puesto?

Gracias.
  #19 (permalink)  
Antiguo 11/04/2007, 12:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Order By Rand() Limit 1

Lamentablemente no, porque el paginator esta hecho para eso, para paginar sobre una serie de resultados, debes de modificar tu codigo y si vas a usar multiples resultados, usas paginator, si no entonces dibujas directo tu codigo.
  #20 (permalink)  
Antiguo 11/04/2007, 13:50
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

Entonces... con un limit 3 si que funcionaria según eso no? porque lo acabo de probar pero sigue fallando :S
  #21 (permalink)  
Antiguo 11/04/2007, 14:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Order By Rand() Limit 1

El problema es que no debes de agregar la clausula LIMIT a tu consulta, ya que el paginator la agrega automaticamente.
  #22 (permalink)  
Antiguo 11/04/2007, 14:41
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Re: Order By Rand() Limit 1

oh... bien.

Entonces lo único que queda es modificar todo el script para que use el paginador cuando toque o no... ya lo miraré entonces a ver que hago.

Muchas gracias por la ayuda :)
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 23:30.