programing

CodeIgniter를 사용하여 mysql 데이터베이스에서 랜덤 레코드

css3 2023. 10. 17. 20:28

CodeIgniter를 사용하여 mysql 데이터베이스에서 랜덤 레코드

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

나는 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 />';
}

코드 점화기는 쿼리를 실행할 때 '랜덤'으로 결과를 정렬할 수 있는 기능을 제공합니다.예를 들어.

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

}

저는 이것을 사용해 본 적이 있는데 잘 작동한다는 것을 발견했습니다.

코드이그니터에 대해서는 모르지만 무작위 데이터셋을 얻는 것은

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

이것은 좋지 않은 생각이지만, 테이블이 좁으면 문제없습니다.거대한 데이터베이스에서 이러한 유형의 쿼리는 매우 느립니다.

저는 데이터맵퍼와 함께 코드이그니터를 사용합니다.이것은 내가 테이블에서 무작위로 레코드를 얻을 때 사용하는 코드입니다.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

ORDER BY RAND() 조항이 랜덤 레코드를 반환합니다!LIMIT을 사용하여 레코드를 제한할 수도 있습니다.

몇 개의 행을 삭제한 테이블이 있다고 생각해 보겠습니다.ID가 올바르게 계속되지 않을 수 있습니다.샘플 ID: 1,5,24,28,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();
}

ORDER BY RAND() 쿼리가 없는 랜덤 행:

$all_rows = $this->db->get('table')->result_array();
$random_row = $all_rows[rand(0,count($all_rows)-1)];

언급URL : https://stackoverflow.com/questions/1627934/random-record-from-mysql-database-with-codeigniter