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
'programing' 카테고리의 다른 글
C#을 사용하여 JavaScript의 이스케이프 해제() (0) | 2023.10.17 |
---|---|
UIVisual EffectView(UI 시각 효과 보기) 및/또는 UIBlurEffect(UI블러 효과)를 안팎으로 페이드하는 방법은 무엇입니까? (0) | 2023.10.17 |
각도 $rootScope.$broadcast() 이벤트가 컨트롤러에서 두 번 적발됨 (0) | 2023.10.17 |
Angular Js1.2에서 리디렉션을 방지하는 방법 (0) | 2023.10.17 |
JS 개체에 키가 있는지 확인 (0) | 2023.10.17 |