MySQL如何为我的变量选择最接近的值

时间:2013-08-05 14:34:32

标签: mysql statistics

我有以下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结果,所以在这种情况下我想要检索最接近的匹配记录到所有三个但我不太确定如何将查询放在一起。

基本上,如果其他查询没有返回结果,这是最后的手段,无论距离原始值多远,这个都会返回下一个最好的东西。

感谢您的帮助

2 个答案:

答案 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))

这样,即使没有给出你感兴趣的范围的匹配,你仍然可以得到更接近的结果。