我使用 Haversine 查询来计算到属性(property)的距离。但即使它有效,我确实注意到我在 PhpMyAdmin 和 HeidiSQL 中收到警告 1292 消息。我想摆脱那些,但我的搜索已经结束。
查询看起来像这样并且如前所述,工作正常但有警告:
SELECT t1.id, t1.garage, t1.more_info_url, t1.date_b, t1.mak_id, t2.id AS m_id, t1.is_b, t1.price, t1.lat, t1.lng,
(6371 * ACOS(COS(RADIANS('52.0791005')) * COS(RADIANS(t1.lat)) * COS(RADIANS(t1.lng) - RADIANS('4.2666311')) + SIN(RADIANS('52.0791005')) * SIN(RADIANS(t1.lat)))) AS distance
FROM alert t1
LEFT JOIN users t2 ON t2.id = t1.mak_id
WHERE is_b = 'on'
AND (date_b BETWEEN CURDATE() - INTERVAL '180' DAY AND CURDATE())
AND (t1.price > 180000)
AND (t1.price < 840000)
HAVING DISTANCE < '140'
ORDER BY distance ASC
这会多次导致此错误:
Warning: #1292 Truncated incorrect DOUBLE value: ''
但是,当我删除最后一行 ORDER BY 子句时,一切都很好。我已经尝试过改变方向,在每个可能的位置都有(单)引号,但我不再理解了。
因此,这会在没有警告的情况下运行:
SELECT t1.id, t1.garage, t1.more_info_url, t1.date_b, t1.mak_id, t2.id AS m_id, t1.is_b, t1.price, t1.lat, t1.lng,
(6371 * ACOS(COS(RADIANS('52.0791005')) * COS(RADIANS(t1.lat)) * COS(RADIANS(t1.lng) - RADIANS('4.2666311')) + SIN(RADIANS('52.0791005')) * SIN(RADIANS(t1.lat)))) AS distance
FROM alert t1
LEFT JOIN users t2 ON t2.id = t1.mak_id
WHERE is_b = 'on'
AND (date_b BETWEEN CURDATE() - INTERVAL '180' DAY AND CURDATE())
AND (t1.price > 180000)
AND (t1.price < 840000)
HAVING DISTANCE < '140'
不确定是否相关,但唯一的 DOUBLE 字段是 t1 中的“价格”。它持有房地产价格。我在测试中也用单引号括起来了。恐怕我已经尝试了我所知道的一切。
谢谢。
最佳答案
我试图创建一个 fiddle 并在那里(不是在我自己的设置上,只是在 fiddle 上)关于我的日期字段的错误:
date_available
DATE NULL DEFAULT '0000-00-00',
所以我仔细查看并进行了更多测试。最终,在将 date_available 以及 distance 放在 ORDER BY 子句中的单引号中后,警告消失了。
关于mysql - Select X as Y query with Where, Having AND ORDER BY Y 给出 1292 警告但没有 ORDER BY 没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382593/