gpt4 book ai didi

mysql - 获取MySQL结果集+基于关闭计算的LIMIT

转载 作者:行者123 更新时间:2023-11-29 05:53:22 25 4
gpt4 key购买 nike

好的,所以我想根据它们的相似程度从表中返回数据。因此,如果所有列都完全匹配,那就是 100%,如果 9/10 匹配 90% 等等......

我可以做

SELECT * FROM table

然后在 php 中使用 for 循环或将每一行放在更高的索引处,如果它的匹配度更高 % 但问题是如果没有 10 条记录而是 100,000 条记录怎么办!这将使脚本加载永远...

所以 LIMIT 不会处理 100,000 条记录,除非以某种方式找出 SQL 查询中的匹配百分比,我无法弄清楚它会涉及函数 COUNT、SUM...吗?

示例表:(用户最喜欢的东西)

+---------------------------------------------------------------<br>
| id | color | food | cocktail | city | sport | <br>
+----------------------------------------------------------------<br>
| 1 | blue | pasta | cosmo | paris | football | <br>
| 2 | blue | burgers | lit | nyc | football | <br>
| 3 | green | hot dogs | negroni | nyc | football | <br>
| 4 | orange | sushi | manhattan | madrid | football | <br>
| 5 | purple | burgers | cosmo | paris | baseball | <br>
| 6 | red | sushi | lit | miami | basketball | <br>
| 7 | blue | sushi | cosmo | paris | football | <br>
| 8 | green | pasta | cosmo | madrid | baseball | <br>
| 9 | yellow | pasta | lit | paris | football |<br>
|10 | green | sushi | appletini | nyc | baseball |<br>
+------------------------------------------------------------------ <br>

这么小的表不会对选择所有记录和使用 PHP 排序产生影响,但想象一下如果它有更多
假设您正在比较 WHERE id=1 并且您希望结果集具有 LIMIT 5,其中返回的 5 与第一行具有最接近的匹配(共 5 个)?
所以一个用户用蓝色 |意大利面 |宇宙 |巴黎 |足球 |会有 100% 匹配
如果 SQL 无法做到这一点,那么我应该如何处理大量记录,因为 PHP for 循环对记录进行排序在性能方面会非常昂贵...

*抱歉,如果这个问题令人困惑或写得不好,我已尽力解释!

最佳答案

在 MySQL 中,您可以:

select ft.*
from favorite_things ft cross join
favorite_things ft1
where ft1.id = 1 and ft1.id <> ft.id
order by ( (ft.color = ft1.color) +
(ft.food = ft1.food) +
(ft.cocktail = ft1.cocktail) +
(ft.city = ft1.city) +
(ft.sport = ft1.sport)
) desc
limit 5;

MySQL 将 bool 值视为数字上下文中的数字,1 表示“真”,0 表示“假”。因此,将 bool 值相加计算匹配项。

剩下的只是order bylimit

在其他数据库中,您可以使用 case 表达式来做同样的事情。

关于mysql - 获取MySQL结果集+基于关闭计算的LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52107205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com