Fai*_*zan 2 php sql arrays comparison duplicates
可能重复:
何时使用查询或代码
我有一个庞大的用户数据库及其详细信息.我想找到所有彼此最相似的人.哪种方式比较适合?直接编写SQL查询,以便他们在数据库中进行操作以检索已过滤(匹配)的记录.或者首先在php中的数组中检索原始数据然后在该数组上应用比较操作?假设我有1000个用户,我想找到最多的朋友.
UserA has {a,b,r,c,g,h,r,q,l}
UserB has {x,y,z}
UserC has {a,c,r,g,q}
.
.
.
UserN has{x,y....n}
Run Code Online (Sandbox Code Playgroud)
所以我想找到与UserA最友好的用户.比如将UserA的每个元素与整个数据库中所有用户数组的所有元素进行比较?在上述情况下,UserC应该是UserA最相似的用户.我不知道如何做到这一点.
假设您在表中表示友谊,如下所示:
Table: friendships
from_id | to_id
----------------------------
a | a
a | b
a | r
a | c
...etc...
b | x
b | y
b | z
...etc...
Run Code Online (Sandbox Code Playgroud)
现在您可以编写一个查询来回答您的问题(在MySQL中测试):
SELECT user_id AS user_id_with_most_common_friends, MAX(cnt) AS number_of_common_friends FROM
(SELECT f2.from_id AS user_id, COUNT(*) AS cnt
FROM friendships f1
JOIN friendships f2 ON (f1.to_id = f2.to_id AND f2.from_id <> 'a')
WHERE f1.from_id = 'a'
GROUP BY f2.from_id) totals;
Run Code Online (Sandbox Code Playgroud)
至于性能问题,在您的特定情况下进行经验测试将给出最可靠的答案,但对于大型数据库,我希望使用上述SQL查询比查询每一行并在PHP中计算结果要快得多,原因如下:
除非你的PHP代码有一些东西可以弥补这些缺点(比如一个复杂程度较低的算法,无法在SQL中表达,或者调用一些专门的C代码,例如图像处理),所以通常会更快尽可能在RDBMS内部工作.