我在我的数据库中的两个表一个是保持用户信息(users_table) ,另一种跟踪的朋友改善好友列表查询:数着共同的朋友
users_table:
id username avatar
1 max max.jpg
2 jack jack.jpg
friends_table:
id u1_id u2_id
1 1 2
2 1 3
在每个用户的个人资料我展示他/她的朋友列表
这里是我的查询
select u.id,
u.username,
u.avatar
from friends_table f
join users_table u on f.u1_id = u.id || f.u2_id = u.id
where u.id <> $profile_id
and (f.u1_id = $profile_id || f.u2_id = $profile_id)
此查询选择配置文件所有者的朋友($ PROFILE_ID)
,并与用户表让每个朋友的用户名和头像
现在我想加入他们的行列计算每个朋友和个人资料所有者之间的共同朋友是否可以在一个查询中做到这一点,或者我应该为每个创建的朋友做一些这样的很长很可能很慢的查询(这只是一个例子,它可能有一些语法错误):
foreach ($friends_list_query_resul as $qr){
$friend_id = $qr['id'];
$mutual_count = mysql_query
("select count(*) from friends_table where
($u1_id = $friend_id || $u2_id = $friend_id)
&&
($u1_id IN (SELECT `u1_id`,`u2_id` from friends_table where
($u1_id = $profile_id || $u2_id = $profile_id))
||
$u2_id IN (SELECT `u1_id`,`u2_id` from friends_table where
($u1_id = $profile_id || $u2_id = $profile_id))
")
}
不怕大写字母...... – Lix
我的建议是提取每个ID的朋友列表,并用php做出常见的朋友之间的匹配,当涉及操纵数据时,MSQL比其他编程语言慢。 – jcho360
@ jcho360不好的建议。数据库的规模往往比这种内存方式要好得多。数据库在处理数据时不会“比其他编程语言慢”,实际上,如果使用正确的话,它们通常要快得多。 –