如何在 ZF 中编写此查询?

Posted

技术标签:

【中文标题】如何在 ZF 中编写此查询?【英文标题】:How can I write this query in ZF? 【发布时间】:2009-06-04 17:07:21 【问题描述】:

我正在尝试写这个,用 zf select 查询但没有成功

SELECT * FROM `subscribers` WHERE id IN (Select subscriber_id From gs_relations Where group_id=55) 

我正在尝试这样的事情:

$gs_relations = new GSRelations();
$part = gs_relations->select()->from('gs_relations',subscriber_id')->where("group_id=$group_id");
$select = $this->select()->setIntegrityCheck(false);
return $select->where('id IN ('.$part->__toString().')');

谁能帮我解决这个问题!?

【问题讨论】:

+1,我不明白为什么真正的问题永远不会被投票。 【参考方案1】:

应该这样做:

$gs_relations = new GSRelations();
$part = $gs_relations->select()->from('gs_relations','subscriber_id')->where('group_id = ?',$group_id);
$select = $this->select()->setIntegrityCheck(false);
$select->from('subscribers')->where('id in (' . $part->__toString() . ')');
return $select;

print_r($select->__toString());

输出:

SELECT `subscribers`.* FROM `subscribers` WHERE (id in (SELECT `gs_relations`.`subscriber_id` FROM `gs_relations` WHERE (group_id = 55)))

请告诉我它是怎么回事,我使用下面的代码进行测试,但没有测试执行实际查询,因为我没有这样的数据结构:

$groupId = 55;
$part = $this->db->select()->from('gs_relations','subscriber_id')->where('group_id = ?',$groupId);
$select = $this->db->select()->from('subscribers')->where('id in (' . $part->__toString() . ')');
print_r($select->__toString());

【讨论】:

是的,但我写了几个实际上是分叉的查询,但是你知道它是怎么回事……无论如何,Tnx 寻求帮助……【参考方案2】:

你可以试试这个:

$groupId = 55;
$part = $gs_relations->select()->setIntegrityCheck(false)->from('gs_relations','subscriber_id')->where('group_id = ?', $groupId);
$select = $gs_relations->select()->setIntegrityCheck(false)->from('subscribers')->where('id in ?', $part);

【讨论】:

+1 - 我不知道你可以将 select() 传递给另一个 select() 的占位符!

以上是关于如何在 ZF 中编写此查询?的主要内容,如果未能解决你的问题,请参考以下文章

ZF2:如何从其他模块渲染视图

如何在 laravel 中编写此查询?有啥建议么?

使用 TableGateway ZF2/ZF3 编写类测试

如何在 Codeigniter 模型中编写此查询?

如何在此查询的 codeigniter 活动记录中编写子查询

如何从 ZF2 中子实体的字段集中调用单个表单元素