Pergunta

Eu pesquisei na internet, mas não consegui encontrar nada ...

Eu tenho um banco de dados mysql, e os registros em uma mesa, e eu preciso para obter registro aleatório a partir desta tabela em cada carregamento da página. Como eu posso fazer isso? Existe alguma func para isso?

Aprecie! graças


SORTED: link: http: //www.derekallard. com / blog / post / ordenação-database-resultados-por-acaso-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 />';
}
Foi útil?

Solução

CodeIgniter fornece a capacidade de ordenar os resultados por 'aleatória' quando você executa uma consulta. Por exemplo

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

}

Eu usei isso antes e achei que era bom trabalho. Espero que ajude

Outras dicas

Eu não sei sobre codeigniter, mas recebendo um conjunto de dados aleatórios é

SELECT * FROM table ORDER BY RAND() LIMIT 1

A parte relevante é "ORDER BY RAND()", obviamente.

Você sabe quantos registros existem na tabela? Você poderia fazer algo parecido com isto:

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

então:

select * from
some_Table
limit $count,1

Este trecho de código funcionou bem para mim.

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

Obter registro aleatório de grande mesa é muito caro. Não use ORDER BY RAND().

Esta é uma má idéia, mas se você tem uma pequena mesa não há problema. Em um enorme banco de dados deste tipo de consultas muito lento.

Eu uso codeigniter com DataMapper. Este é o código que eu uso para obter um registro aleatoriamente de Advertiser tabela:

 $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

A ORDER BY RAND () cláusula retorna registros aleatórios! Você pode limitar registros também usando LIMIT.

Vamos pensar que temos mesa em que suprimiu algumas linhas. Há talvez ID não continua corretamente. Para ID de amostra: 1,5,24,28,29,30,31,32,33 (9 linhas)

mysql_num_rows retornos 9

Outra métodos irá retornar as linhas não existentes: $ Count = 9; // porque mysql_num_rows () == 9 $ Count = rand (1, $ count); // retorna 4 para a amostra, mas havn't linha com id = 4

Mas com o meu método você sempre terá as linhas existentes. Você pode separar o código e utilizar primeiro 2 qualquer código no 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

Obter registro aleatório de grande mesa é muito caro. Mas abaixo este código é muito eficaz ..

$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");

Isso será útil ...

Eu acho que este não é o melhor caminho. Por exemplo, você tiver excluído registro que é now==$count. Você deve interagir isso para mysql_num_rows()

Esta função recuperar todas as linhas na tabela em ordem aleatória

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top