Comunidad de diseño web y desarrollo en internet online

Escojer un id aleatoreo de la tabla

Citar            
MensajeEscrito el 19 Abr 2011 07:54 pm
Hola gente, como puedo hacer para escojer un id aleatoreo de la tabla en una consulta Sql en Mysql por ejemplo:

$alt = rand();

"select * from Musica where idmusica='$alt'"

el problema es que rand() me da un numerazo y nada que ver con los id que tengo guadado en la tabla, alguna idea?

Gracias.

Por zonarock

65 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Abr 2011 08:47 pm
Hola, lo puedes realizar directamente desde la consulta SQL, o mediante una funcion en php.

Mediante sql seria de la siguiente forma:

Código :

$random_row = mysql_fetch_row(mysql_query("select * from TU_TABLA order by rand() limit 1"));


$random_row devuelve un array con los datos de la fila extraida aleatoriamente
Cuando la tabla es muy grande, este metodo empieza a ser algo lento (alrededor de 10,000 registros).

La funcion en php seria la siguiente:

Código :


<?php

  function random_row($table, $column) {

      $max_sql = "SELECT max(" . $column . ") 

                  AS max_id

                  FROM " . $table;

      $max_row = mysql_fetch_array(mysql_query($max_sql));

      $random_number = mt_rand(1, $max_row['max_id']);

      $random_sql = "SELECT * FROM " . $table . "

                     WHERE " . $column . " >= " . $random_number . " 

                     ORDER BY " . $column . " ASC

                     LIMIT 1";

      $random_row = mysql_fetch_row(mysql_query($random_sql));

      if (!is_array($random_row)) {

          $random_sql = "SELECT * FROM " . $table . "

                         WHERE " . $column . " < " . $random_number . " 

                         ORDER BY " . $column . " DESC

                         LIMIT 1";

          $random_row = mysql_fetch_row(mysql_query($random_sql));

      }

      return $random_row;

  }

  

  //MODO DE USO

  echo '<pre>';

  print_r(random_row('TU TABLA', 'TU COLUMNA'));

  echo '</pre>';

?>



Saludos, espero te sirva

Por emmanueldamian

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Abr 2011 08:19 pm
Gracias man me sirvio la primera forma.

Por zonarock

65 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.