[英]Zend DB select only 1 table with multiple joins
我正在使用Zend DB使用以下代码生成查询:
$table->select()
->setIntegrityCheck(false) //required for multi-table join
->from('modules')
->joinInner(
'basket_modules',
'modules.id = basket_modules.id')
->joinInner(
'baskets',
'baskets.id = basket_modules.basket_id')
->where('baskets.id = ?', $this->id);
这会生成SQL:
SELECT modules.*, basket_modules.*, baskets.*
FROM modules
INNER JOIN basket_modules ON modules.id = basket_modules.id
INNER JOIN baskets ON baskets.id = basket_modules.basket_id
WHERE (baskets.id = '3')
我的问题在于SELECT部分,它选择所有3个表而不仅仅是模块,这是我想要的。 所以我想要生成的查询是:
SELECT `modules`.*
FROM `modules`
#etc...
我怎样才能做到这一点? 如果我手动编辑查询并运行它,它会返回我想要的内容,因此语法应该没有问题。
请查看手册Zend_Db_Select中的示例。 滚动到示例#13。
要从表中选择无列,请使用空数组作为列列表。 此用法也适用于from()方法,但通常您需要查询中主表中的某些列,而您可能不希望连接表中的列。
$select = $db->select()
->from(array('p' => 'products'),
array('product_id', 'product_name'))
->join(array('l' => 'line_items'),
'p.product_id = l.product_id',
array() ); // empty list of columns
您可以为其他表和主表指定列名,如下所示
$table->select()
->setIntegrityCheck(false) //required for multi-table join
->from('modules',array('modules.*'))
->joinInner(
'basket_modules',
'modules.id = basket_modules.id',array('basket_modules.id'))
->joinInner(
'baskets',
'baskets.id = basket_modules.basket_id',array('baskets.id'))
->where('baskets.id = ?', $this->id);
所以sql会是这样的
SELECT modules.*, basket_modules.id, baskets.id
FROM modules
INNER JOIN basket_modules ON modules.id = basket_modules.id
INNER JOIN baskets ON baskets.id = basket_modules.basket_id
WHERE (baskets.id = '3')
$table->select()
->setIntegrityCheck(false) //required for multi-table join
->from('modules')
->joinInner(
'basket_modules',
'modules.id = basket_modules.id',array(''))
->joinInner(
'baskets',
'baskets.id = basket_modules.basket_id',array(''))
->where('baskets.id = ?', $this->id);
给出一个空数组作为join
的第三个参数,否则它将从连接的表中选择所有字段。如果你想要一些字段,那么在连接时指定数组中的字段名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.