我在我的网站上查询了一个新闻源,该新闻源选择了登录用户与发布帖子的用户有关系(跟随)的用户的所有帖子。听起来令人困惑,但这是我的疑问:
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
谢谢!
答案 0 :(得分:3)
您可以使用implode()
来连接值:
$escaped = array_map('mysqli_real_escape_string', $array);
$in = "IN ('" . implode("', '", $escaped) . "')";
然后,在查询中:
a.tag $in AND ...
如果数组包含字符串,则必须对它们进行转义,这与您用于运行查询的驱动程序有关。