2012-12-16 15 views
1

对不起,如果这之前已经问过,但我试过寻找类似的东西,但找不到任何东西。在php文件或通过mysql手动计算?

我有三个表:用户,爱好和user_hobbies(联前两个)。我想根据他们的爱好来计算两个用户之间的相似度。为此,我首先需要两套:用户A的兴趣爱好和用户B的兴趣爱好,我可以通过两个简单的查询获得这两种兴趣。我必须计算这两个集合的其他原因,在一个PHP文件,所以他们可用于我,在两个阵列中,为下一步:

我必须计算他们的共同爱好(即交集套)。

想法#1:有两个数组,我可以通过某种方法计算常见元素。

理念#2:我可以做一个第三个查询(例如SELECT hobby FROM user_hobbies WHERE user_id IN ('uid_A', 'uid_B') GROUP BY hobby HAVING COUNT (*) = 2),而不是打扰自己。

我想我的问题是关于性能。手动计算还是更快?还是MySQL查询要快得多?

+1

我建议,除非你知道速度是一个问题,你不必担心它,赞成与更清晰和更容易维护。 –

回答

0

你已经有一个标准化的表来保存用户的爱好表,那么为什么不与去?

一般来说,SQL会快很多,第一个10万条记录左右至少。然后,您会看到通过未检索索引的列进行审查的性能下降,或者使用'filesort'查询通过ORDER BY关键字引入的大型数据集。

对于可扩展性,我建议使用一个内连接来缩小对于初学者准备。

认真对待这个问题。还有没有提到的其他栏可能表明用户可能有多个爱好?这些是您在扩展应用程序时考虑的事情。

否则,你应该罚款对于初学者,免得你应该过早优化。

我会选择#2。

0

简而言之:如果你的操作是不是一个组基本操作最好是被移出MSSQL或任何RDBMS的。

因为,你不能容易地扩展MsSQL。