Mysql 使用表达式查询选择大于

Mysql 使用表达式查询选择大于,mysql,zend-framework,zend-framework2,Mysql,Zend Framework,Zend Framework2,我正在尝试编写以下查询: SELECT * FROM program WHERE (SELECT MAX(surface) FROM lot WHERE lot.id_program=program.id) > $min_surface; 以下代码起作用: $min_surface=40; $select->where('(SELECT MAX(surface) FROM lot WHERE lot.id_program=program

我正在尝试编写以下查询:

SELECT * FROM program
    WHERE (SELECT MAX(surface) FROM lot 
           WHERE lot.id_program=program.id) > $min_surface;       
以下代码起作用:

$min_surface=40;
$select->where('(SELECT MAX(surface) FROM lot WHERE lot.id_program=program.id) > '.$min_surface);
但是,我想使用greaterThan谓词:

$select->where->greaterThan(
     '(SELECT MAX(surface) FROM lot WHERE lot.id_program=program.id)'
     ,$min_surface
);
将引发以下错误:

Statement could not be executed (42000 - 1064 - You have an error in your SQL syntax;   
     check the manual that corresponds to your MySQL server version 
     for the right syntax to use near 
'`SELECT` `MAX``(``surface``)` `FROM` `lot` `WHERE` `lot`.`id_program``=``program' at line 1)

在您的案例中确实不需要使用子查询。您可以只加入表

SELECT program.*, MAX(surface) as max_surface 
FROM program
JOIN lot ON lot.id_program = program.id
GROUP BY program.id
HAVING max_surface > $min_surface
可以编写此查询

$select->from('program')
    ->join(
        'lot', 
        'lot.id_program = program.id', 
        array('max_surface' => new Zend_Db_Expr('MAX(surface)'))
    )
    ->group('program.id')
    ->having('max_surface > ?', $min_surface)

希望对您的查询有所帮助

订单编号在哪里?它们是一个
$select->ORDER('id DESC')在我的代码末尾(不在该示例中,因为它不会导致错误在编辑后与您的错误代码完全不同。您能显示准确的错误代码吗?这些反勾号是这样的吗?是的,包含了反勾号,这有点奇怪。显示的错误代码就是帖子中包含的错误代码。之前,我使用了
新表达式('SELECT MAX(surface)FROM lot WHERE lot.id_program=program.id')
这是不正确的