我正在尝试使用以下查询从数据库返回语音消息:
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 | |
+-------------+---------------+------+-----+-------------------+-------+发布于 2012-03-25 05:05:01
您经度/经度数据是35/45,而您的查询查找的是经度/经度~45/~35。也就是说,在data或SQL WHERE子句中有lat和long倒退(至少,它在移动屏幕上看起来是这样)。
发布于 2012-03-25 05:06:07
您得到了一个空集,因为您在查询中以错误的方式获取了纬度和经度-您请求的经度介于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;(我故意改变了查询字段的顺序,而不是改变值,因为这样它就会与您在表中显示的顺序相匹配,这会使它更容易阅读。)
https://stackoverflow.com/questions/9855600
复制相似问题