mysql – 基于百分比计算(*)百分比 – 使用百分比计算的复杂查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 基于百分比计算(*)百分比 – 使用百分比计算的复杂查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2338字,纯文字阅读大概需要4分钟。
内容图文
此查询基于用户共有多少单词来建议友谊. in_common设置此阈值.
我想知道是否有可能使这个查询完全基于%.
我想要做的是让用户向当前用户建议,如果他们的单词的30%匹配.
curent_user总字数100
in_common阈值30
some_other_user总字数10
其中3个匹配current_users列表.
由于3是10的30%,因此这是当前用户的匹配.
可能?
SELECT users.name_surname, users.avatar, t1.qty, GROUP_CONCAT(words_en.word) AS in_common, (users.id) AS friend_request_id
FROM (
SELECT c2.user_id, COUNT(*) AS qty
FROM `connections` c1
JOIN `connections` c2
ON c1.user_id <> c2.user_id
AND c1.word_id = c2.word_id
WHERE c1.user_id = :user_id
GROUP BY c2.user_id
HAVING count(*) >= :in_common) as t1
JOIN users
ON t1.user_id = users.id
JOIN connections
ON connections.user_id = t1.user_id
JOIN words_en
ON words_en.id = connections.word_id
WHERE EXISTS(SELECT *
FROM connections
WHERE connections.user_id = :user_id
AND connections.word_id = words_en.id)
GROUP BY users.id, users.name_surname, users.avatar, t1.qty
ORDER BY t1.qty DESC, users.name_surname ASC
SQL小提琴:http://www.sqlfiddle.com/#!2/c79a6/9
解决方法:
我可以建议一种不同的方式来看待你的问题吗?
您可以查看相似性指标,例如Cosine Similarity,它可以更好地衡量用户之间基于单词的相似度.要了解您的情况,请考虑以下示例.对于用户u1,您有一个单词A = {house,car,burger,sun}的向量,对于用户u2,有另一个向量B = {flat,car,pizza,burger,cloud}.
给定这些单独的向量,您首先构建另一个将它们放在一起的向量,这样您就可以向每个用户映射他/她是否在其向量中包含该单词.像这样:
| -- | house | car | burger | sun | flat | pizza | cloud |
----------------------------------------------------------
| A | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
----------------------------------------------------------
| B | 0 | 1 | 1 | 0 | 1 | 1 | 1 |
----------------------------------------------------------
现在,每个用户都有一个向量,其中每个位置对应于每个用户的每个单词的值.这里它代表一个简单的计数,但如果适用于您的情况,您可以使用基于字频的不同指标来改进它.看看最常见的一个,叫做tf-idf.
有了这两个向量,您可以计算它们之间的余弦相似度,如下所示:
这基本上是计算上面向量的每个位置之间的乘积之和除以它们的相应幅度.在我们的例子中,即0.47,在0和1之间变化的范围内,两个矢量最相似的越高.
如果选择这样,则无需在数据库中进行此计算.您可以计算代码中的相似性,并将结果保存在数据库中.有几个库可以为您做到这一点.在Python中,请查看numpy library.在Java中,请查看Weka和/或Apache Lucene.
内容总结
以上是互联网集市为您收集整理的mysql – 基于百分比计算(*)百分比 – 使用百分比计算的复杂查询全部内容,希望文章能够帮你解决mysql – 基于百分比计算(*)百分比 – 使用百分比计算的复杂查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。