我正在尝试使用此查询从数据库返回语音邮件:
SELECT m.mid,
m.uid,
m.latitude,
m.longitude,
m.user_rating,
m.created_at
FROM application_Message AS m
WHERE
m.longitude BETWEEN 34.657646284846685 AND 35.342353715153315 AND
m.latitude BETWEEN 44.757919366450686 AND 45.242080633549314;
并且数据库中包含此内容:
+--------------+---------------+---------+-------+----------+-----------+---------------------+-------------+
| mid | uid | message | speed | latitude | longitude | created_at | user_rating |
+--------------+---------------+---------+-------+----------+-----------+---------------------+-------------+
| 158749857936 | 3425635465657 | | 5.5 | 35 | 45 | 2011-10-10 00:00:00 | 7 |
| 158749857910 | 3425635465699 | | 10.5 | 35 | 45 | 2012-11-11 00:00:00 | 10 |
| 158749857905 | 3425635465699 | | 12.5 | 35 | 45 | 2012-11-11 00:00:00 | 10 |
+--------------+---------------+---------+-------+----------+-----------+---------------------+-------------+
关于为什么我得到一个空集的任何想法。我尝试在0到100之间运行它,如果值更接近我正在寻找的值,它的工作原理是什么呢?我没有得到任何SQL错误。
以下是表格说明:
+-------------+---------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+-------------------+-------+
| mid | decimal(39,0) | NO | PRI | NULL | |
| uid | decimal(39,0) | NO | | NULL | |
| message | blob | NO | | NULL | |
| speed | float | YES | | NULL | |
| latitude | double | NO | | NULL | |
| longitude | double | NO | | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
| user_rating | int(11) | NO | | NULL | |
+-------------+---------------+------+-----+-------------------+-------+
答案 0 :(得分:1)
您的纬度/经度数据为35/45,您的查询正在寻找纬度/经度~45 / ~35。也就是说,你在数据或SQL WHERE子句中都有lat和long backward(至少,它在移动屏幕上的样子)。
答案 1 :(得分:0)
你得到一个空集,因为你的查询中你的纬度和经度是错误的 - 你要求34.xxx和35.xxx之间的经度,但所有您的经度值为45.同样,您要求44.xxx和45.xxx之间的纬度,但所有纬度值均为35。
因此,您的数据不正确,或者您需要将查询更改为:
SELECT m.mid, m.uid, m.latitude, m.longitude, m.user_rating, m.created_at
FROM application_Message AS m
WHERE m.latitude BETWEEN 34.657646284846685 AND 35.342353715153315
AND m.longitude BETWEEN 44.757919366450686 AND 45.242080633549314;
(我故意改变了被查询字段的顺序而不是更改值,因为它与您在表格中显示的顺序相匹配,这使得阅读更容易。)