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

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

谢谢您的帮助

最佳答案

您的原始查询将更简单且更具可读性,因为:

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

它将返回与这三对字段的组合偏差最小的行。

10-07 12:32
查看更多