0

これは明らかかもしれませんが、私は友達システムを作成していますが、テーブルの userid 列に複数の可能なユーザー ID が必要ですが、activity以下のコードを使用すると:

$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、結果を返しても何も返されません。ユーザーとそのすべての友人のストリームコンテンツが必要です。

ここで私は何を間違えましたか?問題が見つからないようですか?

ありがとう

4

1 に答える 1

1

2つの別々のクエリを使用する代わりに、joinを使用できます。

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).')';
于 2012-10-19T10:14:59.073 に答える