2012-10-19 71 views
0

確定這可能是明顯的,但我想提出一個邀請好友系統,但是我需要有用戶ID列多個可能的用戶ID在我的表activity但是當我使用下面的代碼:工作在朋友系統,需要有一種方法來添加朋友的ID到WHERE查詢?同一列?

$q = $pdo->prepare("SELECT * FROM friends WHERE userid=:uid"); 
     $q->execute(array(
      ":uid"=>$user['id'], 
     )); 
     if($q->rowCount()>0){ 
      $remainder =""; 
      foreach($q as $p){ 
       $remainder .= "OR `userid` =`".$p['friendid']."`"; 
      } 
     } 
     $query = $pdo -> prepare("SELECT * FROM `activity` WHERE `userid`=:id .$remainder. ORDER BY id DESC LIMIT 50"); 
     $query->execute(array(
      ":id"=>$user['id'] 
     )); 

它其實沒有返回當我var_dump的結果。而它應該具有用戶和他/她的所有朋友的流內容。

我在這裏做了什麼錯?我似乎無法找到問題?

感謝

回答

1

而不是使用兩個單獨的查詢,你可以使用加入的:

select * from `activity` as `t` 
join `friends` as `r` on (`t`.user_id = `r`.user_id) 
where `t`.user_id = :id 

的實際問題,在你的代碼是:

$remainder .= "OR `userid` =`".$p['friendid']."`"; 
          ^    ^

刪除它們。

而且它會更容易使用IN,而不是重複在SQL查詢同一代碼:

$remainder = 'AND user_id in ('; 
$user_ids= array(); 

foreach($q as $p){ 
    $user_ids[] =$p['friendid']; 
} 

$remainder .= implode(',', $user_ids).')'; 
+0

等待,我認爲你是在正確的軌道上,但呃......我怎麼會真正實現這個我意思是user_id my:user ['id']? – user115422

+0

我嘗試刪除引號和好,我什麼都沒有得到 – user115422

+0

@MuqMan在我的第一個查詢的'where'子句,你應該綁定'array(':id'=> $ user ['id'])' – Leri