2011-01-04 12 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

に制限しながら、私はあなたが必要と仮定していますあなたの2つのテーブルにthisのコメントを投稿する。 あなたは外来の鍵について言及していないので、私はそれも仮定しています。

テーブルの列名が同じかどうかは不明です。 私は外来のキーと列名を仮定してテーブルの結合クエリをポストしていますので、使用する前に修正してください。

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