gpt4 book ai didi

mysql - 在一个语句中选择最近的位置和稍远的位置

转载 作者:行者123 更新时间:2023-11-29 05:30:11 25 4
gpt4 key购买 nike

我目前正在尝试从位置表中进行选择。结果应该是最近的位置,另外还有一个距离至少 30 公里的位置。

所以我想做一个

SELECT * FROM locations WHERE (distance = minimumdistance OR distance > 30) AND some other parameters LIMIT 2

但如果没有第二个选择,我无法获得最小距离,第二个选择也具有所有其他参数,这将使语句变得非常长。

MIN(distance) 需要一个分组,但这会导致我只得到一个结果而不是 2...

有什么方法可以更简单地做到这一点?在语句中创建两次没有完整 WHERE 子句的语句。

目前是

SELECT * FROM locations WHERE (distance = (SELECT MIN(distance) FROM locations WHERE some other parameters ) OR distance > 30) AND some other parameters LIMIT 2

现在试着想象一下,如果有一些其他参数是一个很长的字符串,而距离是一个计算而不是一个静态表列,这会变得非常讨厌。

最佳答案

如果您坚持在一个查询中执行此操作,那么这将根据您的需要执行(已更新为更标准)

SELECT

-- this will have 2 records, 1 nearest and 1 with l.distance > 30
d.*
FROM (
SELECT
loc.*,
-- this assumes locationID == the PK field, update as needed
IF(loc.distance>30,@farLoc := loc.locationID,@nearLoc := loc.locationID) AS ignoreMe
FROM locations AS loc,
(
SELECT @nearLoc := 0,@farLoc := 0
) AS v
WHERE some other parameters
ORDER BY loc.distance DESC
) AS d
WHERE d.locationID IN (@nearLoc,@farLoc)

但是真正简单的 union 会做你应该在这种情况下使用的东西

(
SELECT * FROM locations
WHERE some other parameters
ORDER BY distance ASC
LIMIT 1
) UNION (
SELECT * FROM locations
WHERE some other parameters
AND distance > 30
ORDER BY distance ASC
LIMIT 1
)

语句是否“非常长”并不重要,只要它是有效的即可。如果其他参数是在脚本中生成的,那么就没有额外的维护开销,这将是最有效的方法。

关于mysql - 在一个语句中选择最近的位置和稍远的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15682439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com