web-dev-qa-db-fra.com

Enregistrement aléatoire de 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 des enregistrements à une table, et je dois obtenir un enregistrement aléatoire de cette table à chaque chargement de page. Comment puis je faire ça? Y a-t-il une fonction pour ça?

Apprécier! Merci


SORTED: Link: 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 />';
}
25

Codeigniter offre la possibilité de classer vos résultats par «RANDOM» lorsque vous exécutez 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 je l'ai trouvé très bien. J'espère que cela pourra aider

84
Patrick O'Doherty

Je ne sais pas sur codeigniter, mais obtenir un jeu de données aléatoire est

SELECT * FROM table ORDER BY Rand() LIMIT 1

La partie pertinente est "ORDER BY Rand()", évidemment. 

6
ty812

Cet extrait de 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
Dipanwita Das

Savez-vous combien il y a de disques dans la table? Vous pouvez faire quelque chose comme ça:

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

puis:

select * from
some_Table
limit $count,1

Obtenir des enregistrements aléatoires depuis une grande table coûte très cher . Ne pas utiliser ORDER BY Rand().

C'est une mauvaise idée, mais si vous avez une petite table, pas de problème ..__ Dans les bases de données énormes, ce type de requêtes est très lent.

3
vchakoshy

J'utilise codeigniter avec datamapper. C'est le code que j'utilise pour obtenir un enregistrement au hasard dans la table Advertiser:

 $ad = new Advertiser();
 $ad->limit(3);
 $ad->order_by('id', 'RANDOM');
 $ad->get();
2
chantheoun
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 également limiter les enregistrements à l'aide de LIMIT.

2
Sugan Krishna

Imaginons que nous ayons une table où nous avons supprimé certaines lignes. Il y a peut-être ID ne continue pas correctement. Pour l’identificateur d’échantillon: 1,5,24,28,29,30,31,32,33 (9 lignes)

mysql_num_rows renvoie 9

D'autres méthodes renverront des lignes non existantes: $ Count = 9; // parce que mysql_num_rows () == 9 $ count = Rand (1, $ count); // renvoie 4 pour l'échantillon, mais nous n'avons pas rangé avec id = 4

Mais avec ma méthode, vous obtenez toujours des lignes existantes. Vous pouvez séparer le code et utiliser les 2 premiers codes n'importe où sur le 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
SNabi

Obtenir des enregistrements aléatoires d'une grande table coûte très cher. Mais ci-dessous, 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
RajSar

Je pense que ce n'est pas la meilleure façon. Pour l'échantillon, vous avez supprimé l'enregistrement qui est now==$count. Vous devez itérer ceci pour mysql_num_rows()

0
Samir

Cette fonction récupère toutes les lignes de la table dans un 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
Ahmed Mahmoud