在两个用户之间找到常见喜欢的最佳方式

时间:2013-10-06 09:10:10

标签: php mysql

我有一个应用程序可以保存用户喜欢的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。 method2的问题是mysql应该再次选择已经选择的内容。

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

2 个答案:

答案 0 :(得分: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,第二个查询也不应该是一个问题。

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

答案 1 :(得分:1)

尝试使用JOINS

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';