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

您可以使用连接,而不是使用两个单独的查询:

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 回答