在MySQL中使用带有数组的WHERE子句

时间:2013-03-19 20:12:29

标签: php mysql mysqli

我在我的网站上查询了一个新闻源,该新闻源选择了登录用户与发布帖子的用户有关系(跟随)的用户的所有帖子。听起来令人困惑,但这是我的疑问:

SELECT DISTINCT * 
FROM    posts a 
        LEFT JOIN relations b
            ON a.user_id = b.user2
WHERE   b.user1 = $user_id AND 
    b.status IN (1) OR a.user_id = $user_id
ORDER BY a.post_id DESC LIMIT 300

现在,如果用户有过滤器集,则需要过滤帖子。参数是在一个数组中设置的,但我不知道如何在我的查询中设置一个条件来测试我创建的数组。如何构造我的WHERE子句?我正在测试a.tag

包含参数的数组:     $阵列

SELECT DISTINCT * 
FROM    posts a 
        LEFT JOIN relations b
            ON a.user_id = b.user2
WHERE   b.user1 = $user_id AND

我需要帮助:

        a.tag IN ARRAY $array AND

    b.status IN (1) OR a.user_id = $user_id
ORDER BY a.post_id DESC LIMIT 300

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用implode()来连接值:

$escaped = array_map('mysqli_real_escape_string', $array);
$in = "IN ('" . implode("', '", $escaped) . "')";

然后,在查询中:

a.tag $in AND ...

如果数组包含字符串,则必须对它们进行转义,这与您用于运行查询的驱动程序有关。