mysql语句之间无法正常工作

时间:2012-03-24 21:02:35

标签: mysql

我正在尝试使用此查询从数据库返回语音邮件:

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              |       |
+-------------+---------------+------+-----+-------------------+-------+

2 个答案:

答案 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;

(我故意改变了被查询字段的顺序而不是更改值,因为它与您在表格中显示的顺序相匹配,这使得阅读更容易。)