我有一个应用程序可以保存用户喜欢的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应该再次选择已经选择的内容。
您建议如何处理这种情况?
答案 0 :(得分:1)
max_allowed_packet的默认值为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';