2016-12-23 15:21:13 4398次浏览 3条回答 0 悬赏 10 金钱
if (!empty($this->lat) && !empty($this->lng) && !empty($this->near_distance))
{
    CircleDistance::getInstance($query, $this->lng, $this->lat, $this->near_distance);
}
elseif (!empty($this->lat) || !empty($this->lng))
{
    $query->andFilterWhere(['lat' => empty($this->lat) ? null : (double)$this->lat, 'lng' => empty($this->lng) ? null : (double)$this->lng]);
}

通过后台debug调试看的是执行语句是:

SELECT * FROM `s_hotel` WHERE (`lat`=26.411867) AND (`lng`=108.831512) ORDER BY `hotel_id` LIMIT 20;

但是返回空数据,直接将这个语句放在MySQL命令行执行是有数据的。

同样的我多加一个参数后debug的查询语句是:

SELECT * FROM `s_hotel` WHERE (((`lat` >= 26.411417348937) AND (`lat` <= 26.412316651063)) AND (`lng` >= 108.83100994417)) AND (`lng` <= 108.83201405583) ORDER BY `hotel_id` LIMIT 20;

这时返回结果有数据,同样将这条语句拿到命令行执行也是有数据的。

求教,问题可能出现在哪里呢?

  • 回答于 2016-12-23 16:11 举报

    两个环境对 = >=的处理不一样。

    SELECT * FROM s_hotel WHERE (lat like "26.411867") AND (lng like "108.831512") ORDER BY hotel_id LIMIT 20
    
  • 回答于 2016-12-23 16:16 举报

    感觉这个层级不太对啊

    SELECT * FROM s_hotel WHERE 
    (
       (
         (lat >= 26.411417348937)
         AND 
         (lat <= 26.412316651063)
       )
       AND 
       (lng >= 108.83100994417)
    ) 
    AND 
    (lng <= 108.83201405583) 
    ORDER BY hotel_id
    LIMIT 20
    
    1 条回复
    回复于 2016-12-26 17:19 回复

    这是yii生成的SQL语句,复制拿去执行是对的

  • 回答于 2023-04-05 16:19 举报

    我也遇到这个问题,暂时没法解决,我也是生成的语句是对的,但AR就查不出来!请问楼主解决了吗?

您需要登录后才可以回答。登录 | 立即注册
jianghaifm
职场新人

jianghaifm

注册时间:2015-12-26
最后登录:2017-05-25
在线时长:4小时17分
  • 粉丝1
  • 金钱50
  • 威望0
  • 积分90

热门问题