문제

인터넷을 통해 조사했지만 아무것도 찾을 수 없었습니다 ...

MySQL DB가 있고 테이블에 기록되어 있으며 모든 페이지로드 마다이 테이블에서 임의의 레코드를 가져와야합니다. 어떻게 할 수 있습니까? 그것에 대한 기능이 있습니까?

고마워하다! 감사해요


정렬 : 링크 : 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는 쿼리를 실행할 때 'Random'으로 결과를 주문할 수있는 기능을 제공합니다. 예를 들어

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

}

나는 이것을 전에 사용했고 잘 작동하는 것을 발견했습니다. 도움이되기를 바랍니다

다른 팁

CodeIgniter에 대해 잘 모르겠지만 임의의 데이터 세트를 얻는 것은

SELECT * FROM table ORDER BY RAND() LIMIT 1

관련 부분은 "ORDER BY RAND()", 확실히.

테이블에 얼마나 많은 레코드가 있는지 알고 있습니까? 당신은 다음과 같은 일을 할 수 있습니다 :

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

그 다음에:

select * from
some_Table
limit $count,1

이 코드 스 니펫은 저에게 잘 작동했습니다.

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

큰 테이블에서 임의의 레코드를 얻는 것은 매우 비쌉니다.사용하지 마십시오 ORDER BY RAND().

이것은 나쁜 생각이지만 작은 테이블이 있다면 문제가 없습니다. 거대한 데이터베이스에서 이러한 유형의 쿼리는 매우 느립니다.

Datamapper와 함께 CodeInter를 사용합니다. 테이블에서 무작위로 레코드를 얻는 데 사용하는 코드입니다. 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

rand () 조항에 의한 주문은 랜덤 레코드를 반환합니다! 한도를 사용하여 레코드를 제한 할 수 있습니다.

행을 삭제 한 테이블이 있다고 생각합시다. ID가 올바르게 계속되지 않을 수 있습니다. 샘플 ID : 1,5,24,29,30,31,32,33 (9 줄)

mysql_num_rows는 9를 반환합니다

다른 방법은 기존 행을 반환합니다 : $ count = 9; // mysql_num_rows () == 9 $ count = rand (1, $ count); // 샘플의 경우 4를 반환하지만 id = 4로 행하지 않습니다.

그러나 내 방법으로 항상 기존 행을 얻습니다. 코드를 분리하고 사이트의 어느 곳에서나 첫 2 코드를 사용할 수 있습니다.

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

큰 테이블에서 임의의 레코드를 얻는 것은 매우 비쌉니다. 그러나이 코드는 매우 효과적입니다 ..

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

도움이 될 것입니다 ...

나는 이것이 최선의 방법이 아니라고 생각합니다. 샘플의 경우 레코드를 삭제했습니다 now==$count. 당신은 이것을 반복해야합니다 mysql_num_rows()

이 기능은 테이블의 모든 행을 임의 순서로 검색합니다.

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();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top