php - 找到两个用户之间共同喜好的最佳方式

标签 php mysql

我有一个应用程序,可以从用户的 Facebook 帐户中保存用户的点赞,然后在一个用户访问另一个用户的个人资料时显示常见的点赞。有两种方法可以做到这一点: 1. 由于我已经从数据库中获取了 user1 的点赞数,因此我可以将 ID 保存在 字符串如

            $user1_likes="1,2,5,6,10,15,19";

然后使用此查询来查找常见的喜欢:

          SELECT name FROM user_like WHERE uid='user2' AND id IN ($user1)

或者,我可以执行此查询

        SELECT name FROM user_like WHERE uid='user2' AND id IN (SELECT id FROM user_like WHERE uid='user1')

第一种方法的问题是,如果 user1 有很多点赞(比如 4000),查询可能会变得太大,mysql 无法处理。 方法2的问题是mysql应该再次选择它已经选择的内容。

您建议如何处理这种情况?

最佳答案

max_allowed_pa​​cket 的默认值为 16 MB ( http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html ),因此您的第一个查询有 4'000 个赞应该没有问题。即使是 10'000 或 100'000 也没有问题。

如果有 10'000/100'000 个赞,请尝试找出哪一个更快。如果您有正确的索引,第二个查询也不应该成为问题。

就我个人而言,我会选择第二个。

关于php - 找到两个用户之间共同喜好的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19207192/

相关文章:

php - Laravel 分形 可选字段

php - 管理员搜索查询

INNER JOIN 查询中的 MySQL 聚合函数

mysql - SQL查询更新多个字段

mysql - 为什么我添加 htacess 文件后我的 post 方法只发送 1 行表数据?

php - MySQL - 输出时在与关系表连接的表上获取重复行

javascript - jquery 倒计时今天日期

php - 显示数据库中已有查询的最新搜索

php - 在 Windows 上运行在 Cygwin 中编译的 C++ 可执行文件

mysql - 如何在 mysql 查询中将字符串转换为 bool 值?