Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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
Php ZF2查询删除列函数中的表名_Php_Mysql_Zend Framework - Fatal编程技术网

Php ZF2查询删除列函数中的表名

Php ZF2查询删除列函数中的表名,php,mysql,zend-framework,Php,Mysql,Zend Framework,我试图将示例中的查询转换为ZF2查询。我几乎成功了,但是列AS函数在我的计算前面加上了表名,把事情搞砸了 工作查询示例 SELECT id, city, ( 6371 * acos( cos( radians(51.5009745484064) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians(3.6766170173753) ) + sin( radians(51.5009745484064) ) * sin( radians(

我试图将示例中的查询转换为ZF2查询。我几乎成功了,但是列AS函数在我的计算前面加上了表名,把事情搞砸了

工作查询示例

SELECT id, city, ( 6371 * acos( cos( radians(51.5009745484064) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians(3.6766170173753) ) + sin( radians(51.5009745484064) ) * sin( radians( lat ) ) ) ) AS distance 
FROM zipcodes 
HAVING distance < 100 
ORDER BY distance desc 
LIMIT 0 , 20;
ZF2查询输出

SELECT "zipcodes"."id" AS "id", "zipcodes"."city" AS "city", "zipcodes"."(6371 * acos(cos(radians(51.5009745484064)) * cos(radians(lat)) * cos(radians(lng)-radians(3.6766170173753)) + sin(radians(51.5009745484064)) * sin(radians(lat))))" AS "distance" 
FROM "zipcodes" 
HAVING distance < '25' 
ORDER BY "distance" 
ASC LIMIT '10'
ZF2查询

# Expression
$having = new \Zend\Db\Sql\Having();
$having->expression('distance < ?', $radius);

# Select
$select = new Select();
$select->from($this->table)
        ->columns(array('id', 'city', 'distance' => '(6371 * acos(cos(radians(51.5009745484064)) * cos(radians(lat)) * cos(radians(lng)-radians(3.6766170173753)) + sin(radians(51.5009745484064)) * sin(radians(lat))))'))
        ->having($having)
        ->order($order)
        ->limit($limit);

$rowset = $this->selectWith($select);
return $rowset->current();

始终阅读源代码。这会节省你几个小时

/**
 * Specify columns from which to select
 *
 * Possible valid states:
 *
 *   array(*)
 *
 *   array(value, ...)
 *     value can be strings or Expression objects
 *
 *   array(string => value, ...)
 *     key string will be use as alias,
 *     value can be string or Expression objects
 *
 * @param  array $columns
 * @param  bool  $prefixColumnsWithTable
 * @return Select
 */
public function columns(array $columns, $prefixColumnsWithTable = true)
{
    $this->columns = $columns;
    $this->prefixColumnsWithTable = (bool) $prefixColumnsWithTable;
    return $this;
}
从这里开始,只需执行以下操作:

$select->from($this->table)
        ->columns(array('id', 'city', 'distance' => '(6371 * acos(cos(radians(51.5009745484064)) * cos(radians(lat)) * cos(radians(lng)-radians(3.6766170173753)) + sin(radians(51.5009745484064)) * sin(radians(lat))))'), false)
        ->having($having)
        ->order($order)
        ->limit($limit);