Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Yii2查询未正确引用_Mysql_Yii2_Query Builder - Fatal编程技术网

Mysql Yii2查询未正确引用

Mysql Yii2查询未正确引用,mysql,yii2,query-builder,Mysql,Yii2,Query Builder,我一次又一次地遇到这个问题。如果能找到正确构建查询的方法,这样我就可以不再求助于Yii::$app->db->createCommand()作为解决方法,那将是一件很好的事情 我的Yii2查询: $users = UserSpatial::find() ->select('user_id, harvesine(y(coordinates), x(coordinates), :lat, :lon) as dist, astext(coordin

我一次又一次地遇到这个问题。如果能找到正确构建查询的方法,这样我就可以不再求助于Yii::$app->db->createCommand()作为解决方法,那将是一件很好的事情

我的Yii2查询:

            $users = UserSpatial::find()
            ->select('user_id, harvesine(y(coordinates), x(coordinates), :lat, :lon) as dist, astext(coordinates)')
            ->where('st_within(coordinates, envelope(linestring(point(:rlon1, :rlat1), point(:rlon2, :rlat2))))')
            ->orderBy('st_distance(point(:lon, :lat), coordinates)')
            ->params([
                ':lon' => $geo->lon,
                ':lat' => $geo->lat,
                ':rlon1' => $rlon1,
                ':rlat1' => $rlat1,
                ':rlon2' => $rlon2,
                ':rlat2' => $rlat2
            ])
            ->all();
生成的查询在所有错误的位置都有反勾号,奇怪的是,并不是所有参数都有反勾号(很抱歉,您需要仔细查找错误的反勾号,因为我不知道如何最好地突出显示错误的位置):

查询应如下所示,因为我没有将任何字段或值用双方括号括起来:

SELECT \`user_id\`, harvesine(y(coordinates), x(coordinates),      32.7699547, -116.9911288) AS dist, astext(coordinates) 
FROM \`user_spatial\` 
WHERE st_within(coordinates, envelope(linestring(point(-117.07730792871, 32.697490931884), point(-116.90494967129, 32.842418468116)))) 
ORDER BY st_distance(point(-116.9911288, 32.7699547), coordinates)
我可以接受Yii2在字段名和表名周围添加一些反勾号,但它究竟为什么要反勾号数值呢?(仅供参考:$rlon和$rlat值似乎没有被勾选,但我假设这是因为它们是数学计算的结果!?)

我已经尝试强制$geo->lon和$geo->lat浮动值,如下所示:

'lon' => (float)$geo->lon;


但是它没有帮助。

尝试对
select
orderBy
方法使用数组格式,例如:

除了列名,还可以选择DB表达式。你必须使用 选择包含逗号的DB表达式时的数组格式 避免不正确的自动名称引用。比如说,

$query->select([“CONCAT(first_name)”,last_name)作为全名,
"电邮",

在您的情况下,它将是这样的:

$users = UserSpatial::find()
->select([
    'user_id', 
    'harvesine(y(coordinates), x(coordinates), :lat, :lon) as dist',
    'astext(coordinates)'
])
->where('st_within(coordinates, envelope(linestring(point(:rlon1, :rlat1), point(:rlon2, :rlat2))))')
->orderBy(['st_distance(point(:lon, :lat)', 'coordinates)'])
->params([
    ':lon' => $geo->lon,
    ':lat' => $geo->lat,
    ':rlon1' => $rlon1,
    ':rlat1' => $rlat1,
    ':rlon2' => $rlon2,
    ':rlat2' => $rlat2
])
->all();

谢谢你,托尼。你的解决方案让我半途而废。。。它解决了select语句的问题,但是orderBy语句在使用括号时生成了这个值:orderBy
0
,这没关系,因为orderBy语句无论如何都是假的,即应该是orderBy(“[[dist]]”)。谢谢你的帮助!
'lon' => (float)$geo->lon * 1;
$users = UserSpatial::find()
->select([
    'user_id', 
    'harvesine(y(coordinates), x(coordinates), :lat, :lon) as dist',
    'astext(coordinates)'
])
->where('st_within(coordinates, envelope(linestring(point(:rlon1, :rlat1), point(:rlon2, :rlat2))))')
->orderBy(['st_distance(point(:lon, :lat)', 'coordinates)'])
->params([
    ':lon' => $geo->lon,
    ':lat' => $geo->lat,
    ':rlon1' => $rlon1,
    ':rlat1' => $rlat1,
    ':rlon2' => $rlon2,
    ':rlat2' => $rlat2
])
->all();