1

在 mu ZF2 项目中,我有使用 TableGateway 的模型。内部函数负责根据搜索条件(城市、邮政编码、范围、类型)获取对象。

通常我通过简单的方式获取数据行

$rowset = $this->tableGateway->select($where); 

在我的 MySQL 数据库中,我有程序GetObjectsInCityRange(city, range)它返回地理编码城市坐标范围内的所有 object_id

我打算添加 where 子句条件:

WHERE object_id IN (call GetObjectsInCityRange(city, range))

MySQL可以吗?如何正确编写 $where 数组元素以使其工作?

4

2 回答 2

1

您可以where()在选择对象中调用方法并调用in()返回值或创建 where 语句。

例如

$select = new Select();
$select->from($this->tableName)->columns(array($expression));
$where = new Where();
$where->in($identifier, $valueSet);
// or
$where->addPredicate(
    new Predicate\In($identifier, $valueSet)
);
// and then
$select->where($where);

并将其附加到选择对象。

我相信下面的链接正是您所需要的:) http://framework.zend.com/manual/2.1/en/modules/zend.db.sql.html#in-identifier-array-valueset-array

希望这可以帮助 :)

于 2013-03-24T09:45:35.797 回答
0

对于 MySQL,建议您应该使用函数而不是过程,因为函数可以在任何 sql 查询中使用,而过程本身就是类似查询的语句。前任。

call MyPrcedure();

SET var = MyFunction();

因此,您大多数时候都可以在查询中调用函数。但是,根据我的知识,函数将返回有效的 mysql 数据类型,如 varchar、int float 等。因此查询行在您的 In 查询中可能不可用。然后唯一的方法是执行您的查询,将您的过程逻辑转换为子查询并在 IN 语句中传递。

WHERE object_id IN (SUB_QUERY)
于 2013-03-25T20:09:00.883 回答