好吧,这可能是显而易见的,但我正在创建一个好友系统,但我需要为表activity
中的userid列提供多个可能的userid,但当我使用以下代码时:
$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
操作时,它什么也不返回。而它应该具有用户及其所有朋友的流内容。
我在这里做错了什么?我好像找不到问题所在?
谢谢
发布于 2012-10-19 18:14:59
您可以使用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 query中重复相同的代码更容易:
$remainder = 'AND user_id in (';
$user_ids= array();
foreach($q as $p){
$user_ids[] =$p['friendid'];
}
$remainder .= implode(',', $user_ids).')';
https://stackoverflow.com/questions/12971993
复制相似问题