2012-05-24 97 views
0

我有一個用戶表加入/ GROUP BY查詢返回奇怪的結果

id , username 
22 , max 
33 , jack 
44 , joe 

和朋友表

id , u1 , u2 , status , reciver 

有關讀書的朋友,我已經決定增加速度以增加兩個行每個友誼 表,以便它是這樣的

id , u1 , u2 , status , reciver 

1 , 22 , 33 , 1  , 22 
2 , 33 , 22 , 1  , 22 


3 , 22 , 44 , 1  , 22 
4 , 44 , 22 , 1  , 22 

5 , 22 , 55 , 1  , 22 
6 , 55 , 22 , 1  , 22 

現在我想EAC^h用戶的朋友和計算這兩者之間的共同的朋友,如Facebook

這裏是我的好友列表查詢:

  $profile_id = $current_user->id; 

     $res = $db->query(" 
      select 
      u.id as firend_id, 
      u.username as firend_name, 
      f.status as firendship_status, 
      COUNT(f3.u2) as mutual 

      from friends f  
       JOIN users u on f.u2 = u.id 
       LEFT JOIN friends f2 on f.u2 = f2.u1 and f2.u2 != $profile_id 
       LEFT JOIN friends f3 on f3.u1 = $profile_id AND f3.u2=f2.u2  
      WHERE f.u1 = $profile_id 
      group by f2.1 
      "); 

     echo 'friends list : ' 
     foreach ($res->result() as $r){ 

      echo $r->firend_name; 
      echo $r->mutual.' friends'; 

     } 

,所以我檢查配置文件ID($ PROFILE_ID)的所有者對friends.u1和 加盟在friends.u2(創辦朋友)給用戶表中獲得自己的用戶名和ID

問題是在數着共同的朋友

我參加朋友的表與它自身 每個缶nded朋友

似乎在紙上確定,但就像如果用戶有3個朋友,有沒有共同的朋友,只返回的3個朋友 一個返回一些奇怪的結果

,如果有共同的朋友它顯示了所有的朋友,但共同的朋友數量是錯誤的大多數情況下

有通過語句組問題

回答

1

你不能僅僅做到這一點2個朋友表,就需要第三種:

  • Friends1:用戶$ PROFILE_ID的選擇朋友(因爲你有)
  • Friends2:選擇$ PROFILE_ID朋友的朋友(你有)
  • Friends3:在該 朋友$ PROFILE_ID的朋友,我沒有測試以下和它的作品對我的樣本數據的$ PROFILE_ID

朋友之間制定出共同的朋友 - 只是雙檢查更大的樣本:

 select 
     u.id as firend_id, 
     u.username as firend_name, 
     f.status as firendship_status, 
     COUNT(f3.u2) as mutual 

     from friends f  
      JOIN users u on f.u2 = u.id 
      LEFT JOIN friends f2 on f.u2 = f2.u1 and f2.u2 != $profile_id 
      LEFT JOIN friends f3 on f3.u1 = $profile_id AND f3.u2=f2.u2 

     WHERE f.u1 = $profile_id 
     group by f.u2 
+0

感謝名單,但我仍然只得到1的友情的結果,是 – max

+0

你能設置提供完整的數據無處不在「分組依據」的問題嗎? (通過完整的,我只有nean的朋友表,不需要用戶測試這個) – Robbie

+0

坦克前重播,這裏是我的朋友表 http://www.mediafire.com/?u70d4qed46vbq3f – max