Php 这是一个很好的方式使用不在?

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)中。这将为我

让我们想象一下Facebook主页。有一个帖子列表,我报告了一篇帖子,而那篇帖子被屏蔽了

因此,在PHP&Mysql后端,我会做一些类似的事情

  • reported\u posts
    =MySQL
    GROUP\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
    两列。我做完后就接受。这应该行得通。谢谢