Enregistrement aléatoire dans la base de données mysql avec CodeIgniter
j'ai fait des recherches sur internet, mais je n'ai rien trouvé...
j'ai une base de données mysql, et enregistre à une table, et j'ai besoin d'obtenir des enregistrements aléatoires de cette table à chaque chargement de page. comment puis-je le faire? Est-il func pour qui?
Apprécier! merci
triés: lien: 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 />';
}
11 réponses
Codeigniter fournit la possibilité d'ordonner vos résultats par 'RANDOM' quand vous lancez une requête. Par exemple,
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();
}
Je l'ai déjà utilisé et j'ai trouvé que ça marchait bien. Hope qui aide
Je ne sais pas à propos de codeigniter, mais obtenir un ensemble de données aléatoire est
SELECT * FROM table ORDER BY RAND() LIMIT 1
La partie pertinente est "ORDER BY RAND()
", évidemment.
ce code a bien fonctionné pour moi.
$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();
savez-vous le nombre d'enregistrements dans la table? Vous pourriez faire quelque chose comme ceci:
$count=mysql_exec('select count(*)-1 from some_table');
$count=rand(1,$count);
puis:
select * from
some_Table
limit $count,1
obtenir un enregistrement aléatoire à partir d'une grande table est très coûteux.
Ne pas utiliserORDER BY RAND()
.
C'est une mauvaise idée, mais si vous avez une petite table sans aucun problème. Dans une base de données énorme ce type de requêtes très lent.
j'utilise codeigniter avec datamapper. C'est le code que j'utilise pour obtenir un enregistrement aléatoire à partir de la table 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 clause ORDER BY RAND () renvoie des enregistrements aléatoires! Vous pouvez limiter les enregistrements en utilisant LIMIT.
pensons que nous avons une table où nous avons supprimé quelques lignes. Il y a peut-être ID qui ne continue pas correctement. Pour l'identification de l'échantillon: 1,5,24,28,29,30,31,32,33 (9 lignes)
mysql_num_rows retourne 9
une autre méthode ne retournera pas les lignes existantes: $count=9; //parce que mysql_num_rows()==9 $nombre=rand(1,$count); // renvoie 4 pour l'échantillon, mais nous havn't ligne avec l'id=4
Mais avec ma méthode, vous obtenez toujours les lignes existantes. Vous pouvez séparer le code et utiliser le premier 2 code n'importe où sur site.
// 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
obtenir un enregistrement aléatoire à partir d'une grande table est très coûteux. Mais soufflet de ce code est très efficace ..
$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");
Ce sera utile ...
je pense que ce n'est pas la meilleure façon. Pour l'exemple, vous avez supprimé l'enregistrement qui est now==$count
. Vous devez itérer ceci pour mysql_num_rows()
cette fonction récupère toutes les lignes dans la table dans l'ordre aléatoire
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();
}