在mu ZF2项目中,我使用TableGateway建模。 内部函数负责根据搜索条件(city,postal_code,range,type)获取对象。
通常我通过简单的
获取数据行$rowset = $this->tableGateway->select($where);
在我的MySQL数据库中,我有程序 GetObjectsInCityRange(city,range),它返回地理编码城市坐标范围内的所有object_id
我打算添加where子句条件:
WHERE object_id IN (call GetObjectsInCityRange(city, range))
MySQL有可能吗?如何正确写入$ where数组元素使其工作?
答案 0 :(得分:1)
您可以在select对象中调用where()
方法,并在返回值上调用in()
或创建where语句。
E.g。
$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
希望这会有所帮助:)
答案 1 :(得分:0)
对于MySQL,建议您应该使用函数而不是过程,因为函数可以在任何sql查询中使用,而过程本身就是一个类似于语句的查询。实施例
call MyPrcedure();
SET var = MyFunction();
因此,您可以在大多数时间调用查询中的函数。但是根据我的知识,函数将返回有效的mysql数据类型,如varchar,int float等。因此查询行可能在In查询中不可用。然后只能执行您的查询以将您的过程逻辑转换为子查询并传递IN语句。
WHERE object_id IN (SUB_QUERY)