php - fetch_assoc - queries codeigniter
Registro aleatorio de la base de datos mysql con CodeIgniter (11)
¿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
Investigué en Internet, pero no pude encontrar nada ...
Tengo un mysql db y registros en una tabla, y necesito obtener un registro aleatorio de esta tabla en cada carga de página. ¿Cómo puedo hacer eso? ¿Hay algún func para eso?
¡Apreciar! 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 />'';
}
Codeigniter ofrece la posibilidad de ordenar sus resultados por ''RANDOM'' 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();
}
Lo he usado antes y he encontrado que funciona bien. Espero que ayude
Creo que esta no es la mejor manera. Para la muestra, has eliminado el registro que now==$count
es now==$count
. Debe mysql_num_rows()
esto para mysql_num_rows()
Esta función recupera todas las filas en 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();
}
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();
No sé sobre codeigniter, pero obtener un conjunto de datos aleatorios es
SELECT * FROM table ORDER BY RAND() LIMIT 1
La parte relevante es " ORDER BY RAND()
", obviamente.
Obtener un registro aleatorio de una mesa grande es muy caro. No use 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.
Obtener un registro aleatorio de una mesa grande es muy caro. 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 ...
Permite pensar que tenemos una tabla donde borramos algunas filas. Tal vez 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
Otro método devolverá filas no existentes: $ count = 9; // porque mysql_num_rows () == 9 $ count = rand (1, $ count); // devuelve 4 para la muestra, pero no hemos remar 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
Yo uso codeigniter con datamapper. Este es el código que utilizo para obtener un registro aleatorio del Advertiser
tabla:
$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.