2012-10-18 25 views
1

你好更知識的部落。這裏很新,試圖寫一個簡單的「朋友」查詢。我搜索了SO基地,無法從其他問題/解決方案中得出答案。需要幫助調整codeigniter朋友查詢

我有兩個看似標準的表,一個用於id/firstname/lastname等的會員,另一個是id/inviter_id/friend_id/status的友誼表。我選擇(任意)將友誼結構化爲每個關係一行而不是每個關係兩行。 (似乎這個問題會更容易/不存在與每行兩行,但感覺像它會導致其他問題,並希望如果可能的話解決它。)

我想返回一個數組所有與當前用戶有朋友的人的名字/姓氏,並且大部分都成功了,除了我也讓用戶自己列出每個查找,所以8行包括當前用戶的4個,例如這裏是我的codeigniter查詢:

$id = $this->session->userdata('id'); 
$this->db->select('first_name, last_name')->from("members"); 
$this->db->join('friendship', 'friendship.id_inviter = members.id OR friendship.id_friend = members.id'); 
$where1 = "friendship.status = 'accepted' AND friendship.id_friend = $id"; 
$where2 = "friendship.status = 'accepted' AND friendship.id_inviter = $id"; 
$this->db->where($where1); 
$this->db->or_where($where2); 
$query = $this->db->get(); 
return $query; 

我想這是一些優雅的手腕,我只是看不到。有什麼想法嗎?提前致謝。

+3

不熟悉笨,但我的猜測是你得到的用戶theirself因爲你允許查詢兩種方式工作(即當用戶的好友並且當用戶是邀請者時)。嘗試刪除「OR friendship.id_friend = members.id」。如果這樣的作品,你也可以擺脫where1,只需將where2重命名爲where1。 – JohnLBevan

回答

2

嘗試將"members.id != $id"添加到您的where子句中。

+0

完美,thx男人。回想起來似乎很明顯,但這是天才。 :) – user1757867

+0

@ user1757867沒問題。很高興幫助:) –

0

試試這個:

$this->db->select('members.first_name, members.last_name')->from("friendship"); 
$this->db->join('members', 'members.id = friendship.friend_id'); 
$this->db->where('friendship.inviter_id',$id); 
$this->db->get(); 
+0

非常感謝您花時間在這上面,但上面的解決方案做到了這一點,我在這個問題上遇到了麻煩。 – user1757867