Php 这是一个很好的方式使用不在?
让我们想象一下Facebook主页。有一个帖子列表,我报告了一篇帖子,而那篇帖子被屏蔽了 因此,在PHP&Mysql后端,我会做一些类似的事情Php 这是一个很好的方式使用不在?,php,mysql,Php,Mysql,让我们想象一下Facebook主页。有一个帖子列表,我报告了一篇帖子,而那篇帖子被屏蔽了 因此,在PHP&Mysql后端,我会做一些类似的事情 reported\u posts=MySQLGROUP\u CONCAT(reported\u post\u id)并获取我所有报告的帖子,将其存储在一些缓存中,如memcached或redis。这将给我一个带有逗号分隔的post_id的响应,如123234,45 获取所有homepage\u posts,这些不在(已报告的\u posts)中。这将为我
reported\u posts
=MySQLGROUP\u CONCAT(reported\u post\u id)
并获取我所有报告的帖子,将其存储在一些缓存中,如memcached或redis。这将给我一个带有逗号分隔的post_id的响应,如123234,45
homepage\u posts
,这些不在(已报告的\u posts)
中。这将为我们提供除帖子123、234和45之外的所有需要放在主页中的帖子ID
,正如我在中使用的而不是
报告的文章将继续增加(假设它增加1000个ID)。那时,notin(reported_posts)
子句将需要大量输入。这会影响查询的性能吗?有什么替代方案可以解决这个问题
我希望我能清楚地表达我的疑问,请让我知道,如果它需要更多的澄清,我会这样编辑。多谢各位
编辑
报告的帖子不会被全局考虑,也就是说,如果我报告帖子,它应该只为我隐藏,而不为任何其他人隐藏。因此,它也取决于帐户id。假设报告的帖子
包含一个特定于用户的黑名单帖子列表,那么最好执行一个独占的左连接并让数据库处理所有事情:
SELECT *
FROM homepage_posts hp
LEFT JOIN
reported_posts rp
ON hp.id = rp.post_id
AND rp.account_id = 123
WHERE
rp.id IS NULL
在mysql中,如果列被索引,则“In”操作符可以正常工作。如果该列未编入索引,则会影响性能。您只需添加一个WHERE条件,即可不获取报告的帖子。如报告的位置\u coulmn0
。考虑到您已经为报告的文章获取了列,并且它是一个布尔值,所以没有理由使用这样的透视表。这是可以做到的,但是你要做一个性能测试。我们从中得到的报告的帖子
表包含一个特定于用户的黑名单帖子列表,即它有帐户id
和帖子id
两列。我做完后就接受。这应该行得通。谢谢