4

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...

これどうやってするの?クエリを手動で編集して実行すると、必要なものが返されるため、構文に問題はありません。

4

3 に答える 3

6

マニュアル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
于 2013-04-11T11:53:30.610 に答える
2

以下のように、他のテーブルとメインテーブルの列名を指定できます

$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')
于 2013-04-11T11:50:24.247 に答える
1
$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);

空の配列を 3 番目のパラメーターとして指定します。joinそれ以外の場合は、結合されたテーブルからすべてのフィールドが選択されます。いくつかのフィールドが必要な場合は、結合中に配列でフィールド名を指定します。

于 2013-04-11T11:52:22.507 に答える