2011-01-04 6 views
0

내 프론트 페이지에 6 개의 뉴스/리뷰를 무작위로 표시하고 싶지만 동일한 내용을 6 번 무작위로 표시하지만 내용이 중복되지는 않습니다. 여기에 SQL 쿼리입니다 :Codeigniter에서 질의 문답

SELECT 
    anmeldelser.billed_sti , 
    anmeldelser.overskrift , 
    anmeldelser.indhold , 
    anmeldelser.id , 
    anmeldelser.godkendt 
FROM 
    anmeldelser 
LIMIT 0,6 
UNION ALL 
SELECT 
    nyheder.id , 
    nyheder.billed_sti , 
    nyheder.overskrift , 
    nyheder.indhold , 
    nyheder.godkendt 
FROM nyheder 
ORDER BY rand() LIMIT 0,6 

답변

0

편의를 위해 활동 기록을 내 예를 나타내는 여전히 6

// get the total number of rows 
$total_rows = $this->db->count_all_results('my_table'); 
// offset random point within the total rows 
$offset = rand(0 , $total_rows - 6); 
$q = $this->db->offset($offset)->limit(6)->get('my_table'); 
print_r($q->result_array()); 
+0

는하지만 난 확인 후 주어진 링크를 변경하거나 삭제하시기 바랍니다 작동하지 않는 조인, http://codeigniter.com/user_guide/database/active_record.html – Simon

+0

에서 선택해야합니다 그것. –

+0

@DavidMorrow 선생님 추가 2 tabels입니다 –

0

나는 당신이 필요로하는 것을 가정하고로 제한하면서, 시도는 당신 대신에 순서의 오프셋 (offset) 무작위 너의 것의 this에 의한 2 개의 테이블에 가입하기. 당신은 외래 키를 언급하지 않았으므로 나는 또한 그것을 추측하고 있습니다.

테이블의 열 이름이 같거나 다를지 확실하지 않습니다. 그래서 외래 키와 열 이름을 가정하는 테이블에 대한 조인 쿼리를 게시하므로 사용하기 전에이를 수정하십시오.
다음은 테이블에 가입하는 쿼리입니다 :

$query = $this->db 
    ->select('an.billed_sti,an.overskrift,an.indhold,an.id,an.godkendt, ny.id as ny_id,ny.billed_sti as ny_billed_sti, ny.overskrift as ny_overskrift, ny.indhold as ny_indhold , ny.godkendt as ny_godkendt ') 
    ->from('anmeldelser as an') 
    ->join('nyheder as ny', 'ny.id_fk = an.id', 'left outer') // I am assuming here that the [id_fk] field is the foreign key 
    ->limit(0, 6) 
    ->order_by('puttablename.tablecolumn', 'asc') // Your you table name and column name by which you want to order, you can use [asc/desc] as your need 
    ->get(); 

을 그리고 당신은 UNION here하려는 경우에 대한 솔루션입니다.

0
//initialize query builder 
$sql1=$sql2=$this->db; 
$sql1->select('anmeldelser.billed_sti ,anmeldelser.overskrift ,anmeldelser.indhold ,anmeldelser.id ,anmeldelser.godkendt'); 
$sql1->from('anmeldelser'); 
$sql1->order_by('rand()'); 
$sql1->limit(3); 
//get only sql string 
$query1=$sql1->get_compiled_select(); 

$sql2->select('nyheder.id ,nyheder.billed_sti ,nyheder.overskrift ,nyheder.indhold ,nyheder.godkendt'); 
$sql2->from('nyheder'); 
$sql2->order_by('rand()'); 
$sql2->limit(3); 
$query2=$sql2->get_compiled_select(); 
//combine two query 
$query = $this->mydb->query("($query1) UNION ($query2)"); 
$result = $query->result();