2012-12-17 90 views
0

數據庫:MySQL查詢涉及三個階段和兩個表

  • xx_users(ID,姓名,USER_ID,電子郵件,位置)
  • xx_questions(ID,問題描述,USER_ID)

代碼:

$friends = $facebook->api('/me/friends'); 
$arr= $friends['data']; 
$friend_ids_arr = array(); 
foreach($arr as $friend) { 
    $friend_ids_arr[] = $friend['id']; 
} 

$sql = "SELECT (SELECT * FROM xx_questions WHERE user_id IN (" . implode(',', $friend_ids_arr) . ") OR user_id = '$user' ORDER BY time DESC) (SELECT * from questions INNER JOIN users ON users.user_id = questions.user_id WHERE users.location = 'Cambridge, Cambridgeshire')";  
$data = mysql_query($sql) or die(mysql_error()); 

while ($row = mysql_fetch_assoc($data)) { 
     // echo values from what's been selected 
} 

我想選擇xx_questions問題(已張貼用u如果出現以下三種情況中的任何一種:

  1. 那些海報的user_id與當前用戶的朋友之一相匹配的值(即,海報和用戶是朋友)
  2. 海報的user_id與用戶的相匹配的那些值(即海報是用戶)
  3. 海報的位置與當前用戶的位置匹配的那些值(即海報和用戶目前都在同一個城市)

我已成功地使1和2的工作,但是當我嘗試引進3,所以我的兩個問題是會出現的問題:

  1. 什麼正確的MySQL爲3?
  2. 這是如何與1和2結合?

在此先感謝您,讓我知道您是否需要更多信息。

+0

表「xx_questions」和「post」之間的關係是什麼? – Nathan

+0

不是答案,只是對代碼的註釋:'user_id IN(value1,value2,...)或user_id = some_value'相當於'user_id IN(value1,value2,...,some_value)'。 –

+0

@Nathan,對不起,這是一個錯字。看到更正。 – Sebastian

回答

2

要獲取您需要的信息,您需要將xx_questions加入到xx_users。喜歡的東西相匹配的三個條件中的任何一個,下面的回報問題:

select * 
from xx_questions q join 
    xx_users u 
    on q.user_id = u.user_id 
where q.user_id in (<implode(',', $friend_ids_arr)>) or 
     q.user_id = '$user' or 
     u.location = (select location from xx_users where USER_ID = $user) 

我寫了這更像SQL不是一個字符串,因此它更容易閱讀。