我有以下query
我试图在某个呼吸空间内检索所输入变量的匹配。
SELECT fthg, ftag, avover, avunder, whh, wha, whd
FROM full
WHERE (whh < ($home_odds + 0.05)
AND whh > ($home_odds - 0.05)
AND wha < ($away_odds + 0.05)
AND wha > ($away_odds -0.05)
AND whd < ($draw_odds + 0.05)
AND whd > ($draw_odds - 0.05))
有时会返回0结果,所以在这种情况下我想要检索最接近的匹配记录到所有三个但我不太确定如何将查询放在一起。
基本上,如果其他查询没有返回结果,这是最后的手段,无论距离原始值多远,这个都会返回下一个最好的东西。
感谢您的帮助
答案 0 :(得分:2)
您的原始查询会更简单,更易读:
SELECT
fthg,
ftag,
avover,
avunder,
whh,
wha,
whd
FROM full
WHERE ABS($home_odds - whh) < 0.05
and ABS($away_odds - wha) < 0.05
and ABS($draw_odds - whd) < 0.05
如果该查询没有返回任何内容,则可以运行以下命令:
SELECT
fthg,
ftag,
avover,
avunder,
whh,
wha,
whd
FROM full
ORDER BY
ABS($home_odds - whh) + ABS($away_odds - wha) + ABS($draw_odds - whd)
LIMIT 1
它将返回与这三对字段组合中偏差最小的行。
答案 1 :(得分:1)
假设您提供的参数与您要比较的参数之间的距离计算怎么样?像
这样的东西SELECT fthg, ftag, avover, avunder, whh, wha, whd
FROM full
ORDER BY
sqrt(abs(whh - $home_odds) * abs(whh - $home_odds)) +
sqrt(abs(wha - $away_odds) * abs(wha - $away_odds)) +
sqrt(abs(whd - $draw_odds) * abs(whd - $draw_odds))
这样,即使没有给出你感兴趣的范围的匹配,你仍然可以得到更接近的结果。