Mysql IN子句只检索1行

时间:2012-09-13 15:13:34

标签: php mysql

编辑: 谢谢Baylor Rae和JvBerg - 您的回答/评论有助于解决问题。 我不得不删除引号 - 我没有意识到。 谢谢大家的帮助。


我正在尝试使用where ownerid='$friend_ids'子句从“警报”表IN中选择所有数据。 我遇到的问题(尽管有大量的谷歌搜索和代码更改)是它只检索一行。

$fid=$ClassUsers->Friendids($user_id);
echo $fid;

返回(如预期)1,2,3。

但是在尝试时:

$sql="SELECT * FROM alerts WHERE ownerid IN('$fid')";
echo mysql_num_rows($db->query($sql));

仅返回“1”行。

我的提醒表:

Alerts table

有谁知道为什么?或者如何解决这个问题? 我昨天花了整整一夜,前一天和今天几个小时用谷歌搜索,并尝试不同的方式来查询。 感谢。

3 个答案:

答案 0 :(得分:1)

这取决于$ fid的值:

$fid = '1, 2, 3';
$sql="SELECT * FROM alerts WHERE ownerid IN( $fid )";
echo mysql_num_rows($db->query($sql));

将返回所有3行。

答案 1 :(得分:1)

尝试引用您的值

IN ('1', '2', '3')

否则,它会查找字面上为“1,2,3”但不是“1”或“2”或“3”的值。

答案 2 :(得分:1)

如果$fid是数组,则需要执行类似

的操作
$fid_sql = implode(','. $fid);
$sql="SELECT * FROM alerts WHERE ownerid IN( $fid_sql )";

请注意,如果它们是数据库中的整数字段,则不应在此处围绕每个值使用单引号。

如果$fid是一个字符串=“1,2,3”,那么您需要做的就是删除查询中$fid周围的单引号。