我正在使用Yii2 ActiveRecord& ActiveQuery从数据库中检索数据,但我面临不同的结果:
$ne_lat = 53.42712825923;
$sw_lat = 53.39008549731;
$ne_lon = -2.1651649475098;
$sw_lon = -2.288761138916;
$poi = Point::find()
->andWhere('latitude <= :ne_lat', [':ne_lat' => $ne_lat])
->andWhere('latitude >= :sw_lat', [':sw_lat' => $sw_lat])
->andWhere('longitude <= :ne_lon', [':ne_lon' => $ne_lon])
->andWhere('longitude >= :sw_lon', [':sw_lon' => $sw_lon])
->andWhere(['status' => 1])
->asArray()
->all();
返回0一个空数组。但是同样的查询只是有点不同的方式:
$poi = Point::findBySql('SELECT *
FROM `point`
WHERE (((((latitude <= 53.42712825923)
AND (latitude >= 53.39008549731))
AND (longitude <= -2.1651649475098))
AND (longitude >= -2.288761138916))
AND (`status`=1))
')->asArray()->all();
返回30多个结果。 结果如下:
id, name, latitude, longitude
1 , point1, 53.3917409, -2.1684337
2 , point2, 53.4135577, -2.1673014
3 , point3, 53.3991094, -2.2513453
看起来绑定浮点数有问题,因为
$sql = "
SELECT *
FROM point
WHERE latitude <= :ne_lat
AND latitude >= :sw_lat
AND longitude <= :ne_lon
AND longitude >= :sw_lon
AND status=1
";
$poi = Fitter::findBySql($sql, [':ne_lat' => $ne_lat, ':sw_lat' => $sw_lat, ':ne_lon' => $ne_lon, ':sw_lon' => $sw_lon])->asArray()->all();
也不会返回任何记录
有人知道为什么吗?
答案 0 :(得分:1)
$ sw_lon = 2.288761138916; <--
这在第一个查询中是正面的,而在第二个查询中它是负数(-2.288761138916)。
答案 1 :(得分:0)
如果我没错,使用find()方法将返回此查询语句。
SELECT *
来自point
在哪里(atitude&lt; = 53.42712825923)
AND(纬度&gt; = 53.39008549731)
AND(经度&lt; = -2.1651649475098)
AND(经度&gt; = -2.288761138916)
AND(status
= 1)
而不是
SELECT *
来自point
WHERE(((((纬度&lt; = 53.42712825923)
AND(纬度&gt; = 53.39008549731))
AND(经度&lt; = -2.1651649475098))
AND(经度&gt; = -2.288761138916))
AND(status
= 1))
sql语句的差异可能是原因。
答案 2 :(得分:0)
你可以试试&#39; status = 1&#39;而不是&#39; status&#39; =&GT;第一个查询构建器中的1。