Sorting query results by similarity/relevance of specific field
这是我的表,存储 2 个足球队名称(主客)的方式基本不同
|
1
2 3 |
—————————————————————————–
|host|host_aio|h_unchar|h_a|h_b|guest|guest_aio|guest_unchar|guest_a|guest_b| —————————————————————————– |
我有一个主人和一个客人的名字,我会用不同的方式将它们分解,以找到与搜索团队相对应的行
例如在 Melbourne Victory VS Brisbane Roar 的情况下
我的查询是:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
SELECT `host`,`guest`,`h_aio`,`g_aio`,`h_unchar`,`g_unchar`,`h_a`,`h_b`,`g_a`,`g_b`
FROM `tbl` WHERE ( host IN (‘melbourne victory’,‘melbournevictory’,‘melbourne’,‘victory’)|| AND ( guest IN (‘brisbane roar’,‘brisbaneroar’,‘brisbane’,‘roar’)|| ORDER BY FIELD(`h_unchar`, ‘melbournevictory’), FIELD(`g_unchar`, ‘brisbaneroar’) |
结果如下:

我想通过 h_unchar 和 g_unchar 与 host 和 guest 的相关性/相似性对结果进行排序,这就是我添加 .
的原因
但正如您在图片中看到的,21 岁以下的匹配 (U21) 位于顶部
我怎样才能在顶部获得更相似的行?
这里有更多信息:
基本上我从 2 个不同的 API 获得球队名称,第一个 API 名称与第二个 API 名称略有不同,例如(巴塞罗那和巴塞罗那)
并且每个 api 都有一个唯一的信息,其他 api 不会发送…所以我需要以某种方式连接这 2 个 api 并从两者中获取每个游戏的所有信息..我将第一个存储在数据库中,当第二个一个发送我在数据库中搜索的信息以使用团队名称查找第一个 api 信息(api 1 在比赛前发送数据,abpi 2 在比赛后发送数据)
- @RyanVincent 基本上我从 2 个不同的 API 获取团队名称,前 1 个名称与第二个名称( fc barcelona 和 Barcelona )略有不同,每个 api 都有一个独特的信息,其他 api 不会发送……所以我需要以某种方式连接这 2 个 api 并从两者中获取每场比赛的所有信息 .. 我将第一个存储在数据库中,当第二个发送信息时,我在数据库中搜索以使用团队名称查找第一个 api 信息
- @RyanVincent 实际上这是规范化表,该表仅包含主机和来宾名称的不同变体,其他数据存储在不同的表中……我无法再规范化该表,因为我需要检查主机和来宾名称一个查询,以避免获得具有相似名称的其他团队
由于您正在搜索特定的比赛/比赛,并且每天没有很多比赛具有相同的主机/客人名称,我建议您在代码方面执行此操作并避免使已经潜在的缓慢查询复杂化
这不是一个简单的问题,但是如果您想要一些基本的东西,像这种方法可能会有所帮助;
如何使用 PHP 对 MYSQL 中的公司名称进行模糊匹配以实现自动完成?
事实上,这是一个机器学习问题,您需要构建类似聚类算法并找到条目之间的距离,或者构建人们正在寻找的预测算法;这不是一个简单的查询问题。
来源:https://www.codenong.com/34818116/
