0

我有一个应用程序可以从他们的 fb 帐户中保存用户喜欢的内容,然后在一个用户访问另一个用户的个人资料时显示常见的喜欢。有两种方法可以做到这一点: 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 应该再次选择它已经选择的内容。

你有什么建议来处理这种情况?

4

2 回答 2

1

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 个赞,请尝试找出哪个更快。如果你有适当的 indizes,第二个查询也不应该是一个问题。

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

于 2013-10-06T09:22:30.013 回答
1

尝试加入

SELECT t1.name FROM table_name AS t1
LEFT JOIN table_name AS t2 ON (t1.id = t2.id)
WHERE t1.userid = 'user1' AND t2.userid = 'user2';
于 2013-10-06T09:23:30.990 回答