Pregunta

Investigué por internet, pero no pude encontrar nada ...

Tengo un mysql db, y registros en una tabla, y necesito obtener registros aleatorios de esta tabla en cada carga de página. ¿Cómo puedo hacer eso? ¿Hay alguna función para eso?

¡Aprecio! gracias


CLASIFICADO: enlace: http: //www.derekallard. com / blog / post / ordering-database-results-by-random-in-codeigniter /

$this->db->select('name');
$query = $this->db->get('table');
$shuffled_query = $query->result_array();
shuffle ($shuffled_query);

foreach ($shuffled_query as $row) {
    echo $row['name'] . '<br />';
}
¿Fue útil?

Solución

Codeigniter proporciona la capacidad de ordenar sus resultados por "ALEATORIO" cuando ejecuta una consulta. Por ejemplo

function get_random_page()
{
    $this->db->order_by('id', 'RANDOM');
    or
    $this->db->order_by('rand()');
    $this->db->limit(1);
    $query = $this->db->get('pages');
    return $query->result_array();

}

He usado esto antes y descubrí que funciona bien. Espero que ayude

Otros consejos

No sé sobre codeigniter, pero obtener un conjunto de datos aleatorio es

SELECT * FROM table ORDER BY RAND() LIMIT 1

La parte relevante es " ORDER BY RAND () " ;, obviamente.

¿Sabes cuántos registros hay en la tabla? Podrías hacer algo como esto:

$count=mysql_exec('select count(*)-1 from some_table');
$count=rand(1,$count);

entonces:

select * from
some_Table
limit $count,1

Este fragmento de código funcionó bien para mí.

$this->db->select('name');
$this->db->order_by('rand()');
$this->db->limit(1);
$query = $this->db->get('<table>'); //<table> is the db table name
return $query->result_array();

Obtener un registro aleatorio de una tabla grande es muy costoso. No utilice ORDER BY RAND () .

Esta es una mala idea, pero si tienes una mesa pequeña no hay problema. En una gran base de datos, este tipo de consultas es muy lento.

Yo uso codeigniter con datamapper. Este es el código que utilizo para obtener un registro al azar de la tabla Advertiser :

 $ad = new Advertiser();
 $ad->limit(3);
 $ad->order_by('id', 'RANDOM');
 $ad->get();
SELECT product_id, title, description
FROM products
WHERE active = 1
AND stock > 0
ORDER BY RAND()
LIMIT 4

¡La cláusula ORDER BY RAND () devuelve registros aleatorios! Puede limitar los registros también usando LIMIT.

Pensemos que tenemos una tabla donde eliminamos algunas filas. Es posible que la ID no continúe correctamente. Para ID de muestra: 1,5,24,28,29,30,31,32,33 (9 filas)

mysql_num_rows devuelve 9

Otros métodos devolverán filas no existentes: $ cuenta = 9; // porque mysql_num_rows () == 9 $ cuenta = rand (1, $ cuenta); // devuelve 4 para la muestra, pero no hemos remado con id = 4

Pero con mi método siempre obtienes filas existentes. Puede separar el código y usar los primeros 2 códigos en cualquier lugar del sitio.

// Inside of Controller Class
    function _getReal($id,$name_of_table)
 {
 $Q=$this->db->where('id',$id)->get($name_of_table);
 if($Q->num_rows()>0){return $Q;}else{return FALSE;}
 }

 function _getLastRecord($name_of_table)
 {
 $Q=$this->db->select("id")->order_by('id DESC')->limit("1")->get($name_of_table)->row_array();
 return $Q['id'];
 }

 function getrandom()
 {
       $name_of_table="news";
 $id=rand(1,$this->_getLastRecord($name_of_table));
 if($this->_getReal($id,$name_of_table)!==FALSE)
 {
         echo $id;
         // Here goes your code
 }
 else
 {
         $this->getrandom();
 }
// END

Obtener un registro aleatorio de una tabla grande es muy costoso. Pero debajo de este código es muy efectivo ...

$count=mysql_num_rows(mysql_query("select * from table_name WHERE SOME_OF_YOUR_CONDITION"));
$nums=rand(1,$count);


mysql_query(" select * from table_name WHERE SOME_OF_YOUR_CONDITION LIMIT $count,1");

Esto será útil ...

Creo que esta no es la mejor manera. Por ejemplo, ha eliminado el registro que es now == $ count . Debe iterar esto para mysql_num_rows()

Esta función recupera todas las filas de la tabla en orden aleatorio

public function get_questions(){
    $this->db->select('*');
    $this->db->order_by('rand()');
    $this->db->from('multiple_choices');
    $query = $this->db->get();
    return $query->result_array();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top