0

我在我的网站上有一个新闻提要查询,它选择登录用户与发布帖子的用户有关系(关注)的用户的所有帖子。听起来令人困惑,但这是我的查询:

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

包含参数的数组:$array

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

谢谢!

4

1 回答 1

3

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

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

然后,在查询中:

a.tag $in AND ...

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

于 2013-03-19T20:15:05.987 回答