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 />';
}
23
demandé sur designer-trying-coding 2009-10-27 02:39:44

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

78
répondu Patrick O'Doherty 2016-06-09 11:15:44

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.

6
répondu ty812 2009-10-26 23:42:53

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();
4
répondu Dipanwita Das 2016-01-05 09:25:59

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
3
répondu FrustratedWithFormsDesigner 2009-11-04 02:31:23

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.

3
répondu vchakoshy 2011-11-26 08:52:10

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();
2
répondu chantheoun 2012-09-22 01:28:59
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.

2
répondu Sugan Krishna 2018-02-14 10:53:04

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
1
répondu SNabi 2010-02-23 12:39:29

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 ...

1
répondu RajSar 2013-04-05 17:15:35

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()

0
répondu Samir 2012-08-18 08:45:46

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();
}
0
répondu Ahmed Mahmoud 2017-05-09 10:37:31