首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Between语句不起作用

Between语句不起作用
EN

Stack Overflow用户
提问于 2012-03-25 05:02:35
回答 2查看 36关注 0票数 0

我正在尝试使用以下查询从数据库返回语音消息:

代码语言:javascript
复制
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;

数据库中有这样的内容:

代码语言:javascript
复制
+--------------+---------------+---------+-------+----------+-----------+---------------------+-------------+
| 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错误。

以下是表格说明:

代码语言:javascript
复制
+-------------+---------------+------+-----+-------------------+-------+
| 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              |       |
+-------------+---------------+------+-----+-------------------+-------+
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-25 05:05:01

您经度/经度数据是35/45,而您的查询查找的是经度/经度~45/~35。也就是说,在data或SQL WHERE子句中有lat和long倒退(至少,它在移动屏幕上看起来是这样)。

票数 1
EN

Stack Overflow用户

发布于 2012-03-25 05:06:07

您得到了一个空集,因为您在查询中以错误的方式获取了纬度和经度-您请求的经度介于34.xxx和35.xxx之间,但所有的经度值都是45。同样,您要求的纬度介于44.xxx和45.xxx之间,但是所有的纬度值都是35。

因此,要么您的数据不正确,要么您需要将查询更改为以下内容:

代码语言:javascript
复制
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;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9855600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档