2014-01-29 66 views
0

我在我的模型中使用此codeigniter活動記錄查詢以獲得用戶表中排名最高的前10位用戶的最多分數。如果用戶存在於另一個表中,則獲取表的記錄

$this->db->order_by('points', 'desc'); 
     $q=$this->db->get('user', 10); 
     $data = $q->result_array(); 
     return $data; 

這工作正常,並返回最多10個用戶點的信息。 points是我的user表中的一列。

但是,我一直在試圖獲得也存在於另一個表entries的前10名用戶。

在條目表中,user_id和當前用戶在用戶輸入時存儲。

我想獲得頂尖的用戶誰擁有。所以我想改變上面的查詢來返回最多的點數在entries表中的10個用戶。

User Table: 

id, name, points 

Entries Table: 

id, time_entered, image, user_id 

我該怎麼做?

我嘗試了一個連接,它只返回了最多點的單個用戶。

+0

你的'user'表和'entries'表是怎麼樣的? – Jhn

+0

@Jhn請參閱上面的編輯 – user3237078

回答

1

希望您的條目表具有user_id作爲外鍵。

所以,你的代碼應該是:

$this->db->select("user.*,entries.*"); 
$this->db->from("user"); 
$this->db->join("entries","user.id = entries.user_id"); 
$this->db->order_by('user.points', 'desc'); 
$this->db->limit(10); 
$q = $this->db->get();  
$data = $q->result_array(); 
return $data; 
+0

這很好。謝謝 – user3237078

0

我不熟悉的CI,但我會盡力給一個MySQL查詢,而不是,

SELECT * from user AS u 
    WHERE u.id IN (
     SELECT e.user_id from entries AS e 
    ) 
    ORDER BY points DESC LIMIT 10 

只要將它轉換爲CI AR查詢。我認爲CI有一些方法可以設置AR查詢的condition。如果有此選項,則可以將條件設​​置爲IN以確定u.id是否存在於條目表中。

相關問題