首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend DB仅选择1个具有多个连接的表

Zend DB仅选择1个具有多个连接的表
EN

Stack Overflow用户
提问于 2013-04-11 19:40:31
回答 3查看 2.3K关注 0票数 4

我正在使用Zend DB生成一个使用以下代码的查询:

代码语言:javascript
复制
$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:

代码语言:javascript
复制
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')

我这里的问题是选择部分,它选择所有3个表,而不是只选择模块,这是我想要的。所以我想要生成的查询是:

代码语言:javascript
复制
SELECT `modules`.*
FROM `modules`
#etc...

我该怎么做呢?如果我手动编辑查询并运行它,它会返回我想要的结果,所以语法应该不会有问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-11 19:53:31

请看手册Zend_Db_Select中的示例。滚动到示例#13。

若要从表中不选择列,请对列列表使用空数组。这种用法在from()方法中也适用,但通常您希望在查询中包含主表中的一些列,而您可能不希望连接表中包含任何列。

代码语言:javascript
复制
$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
票数 6
EN

Stack Overflow用户

发布于 2013-04-11 19:50:24

您可以指定其他表和主表的列名,如下所示

代码语言:javascript
复制
$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将如下所示

代码语言:javascript
复制
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')
票数 2
EN

Stack Overflow用户

发布于 2013-04-11 19:52:23

代码语言:javascript
复制
$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的第三个参数,否则它将选择表joined.If中的所有字段,然后在连接时指定数组中的字段名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15947848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档