按特定字段

时间:2016-01-15 19:11:22

标签: mysql

这是我的表,基本上不同的方式来存储2个足球队的名字(主持人和客人)

-----------------------------------------------------------------------------
|host|host_aio|h_unchar|h_a|h_b|guest|guest_aio|guest_unchar|guest_a|guest_b|
-----------------------------------------------------------------------------

我有一个主持人和一个客人名称,我将以不同的方式将其分解,以便找到搜索到的团队的相应行

例如Melbourne Victory VS Brisbane Roar的情况 我的疑问是:

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')|| 
h_aio IN ('melbourne victory','melbournevictory','melbourne','victory')||
h_unchar IN ('melbourne victory','melbournevictory','melbourne','victory') ||
h_a IN ('melbourne victory','melbournevictory','melbourne','victory') ||
h_b IN ('melbourne victory','melbournevictory','melbourne','victory') ||
h_c IN ('melbourne victory','melbournevictory','melbourne','victory') ||
h_d IN ('melbourne victory','melbournevictory','melbourne','victory') ||
h_g IN ('melbourne victory','melbournevictory','melbourne','victory') )

AND ( 

guest IN ('brisbane roar','brisbaneroar','brisbane','roar')||
g_aio IN ('brisbane roar','brisbaneroar','brisbane','roar')||
g_unchar IN ('brisbane roar','brisbaneroar','brisbane','roar')||
g_a IN ('brisbane roar','brisbaneroar','brisbane','roar') ||
g_a IN ('brisbane roar','brisbaneroar','brisbane','roar') || 
g_b IN ('brisbane roar','brisbaneroar','brisbane','roar') ||
g_c IN ('brisbane roar','brisbaneroar','brisbane','roar') || 
g_d IN ('brisbane roar','brisbaneroar','brisbane','roar') ||
g_g IN ('brisbane roar','brisbaneroar','brisbane','roar') )

ORDER BY FIELD(`h_unchar`, 'melbournevictory'), FIELD(`g_unchar`, 'brisbaneroar')

结果如下:

enter image description here

我想根据h_uncharg_uncharhostguest的相关性/相似性对结果进行排序,这是我添加的原因。< / p>

ORDER BY FIELD(`h_unchar`, 'melbournevictory'), FIELD(`g_unchar`, 'brisbaneroar')

但正如您在图片中看到的那样,21岁以下的匹配(U21)位于顶部 我怎样才能在顶部获得更相似的行?

这里有更多信息:

基本上我从两个不同的API获得团队名称,第一个api名称与第二个api名称有点不同(fc barcelona和Barcelona)

并且每个api都有一个独特的信息,其他api不会发送...所以我需要以某种方式连接这个2 api并从两者获得每个游戏的所有信息..我将第一个存储在数据库中,当第二个一个发送信息我在数据库中搜索使用球队名称找到第一个api信息(api 1在比赛前发送数据,abpi 2在比赛后发送数据)

2 个答案:

答案 0 :(得分:2)

由于您正在搜索特定的匹配/游戏,并且每天都有相同主机/访客名称的匹配不多,我建议您在代码端执行此操作,并避免使已经存在的潜在慢查询复杂化

答案 1 :(得分:1)

这不是一个简单的问题,但是如果你想要一些基本的东西,这样的方法可能有助于作为第一关。 How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete?

事实上,这是一个机器学习问题,您需要构建类似于聚类算法的东西,并找到条目之间的距离,或者预测人们正在寻找的算法;那个不是一个简单的查询问题。