sql >> データベース >  >> RDS >> Mysql

CakePHP-JOINを使用して3つのテーブルを効率的に検索する

    コードを少なくしたい ケーキモデル/テーブルの命名規則(db table products -モデル名Product 、dbtableprices -モデル名prices )さらなるプロジェクト管理のため。あなたがやりたいようです:

    $results = $this->Product->find('all', array(
        'fields' => array(
            'Company.name',
            'Product.feature',
            'Price.price'
        ),
        'joins' => array(
            'LEFT JOIN companies AS Company ON Product.company_id = Company.id
             LEFT JOIN prices AS Price ON Product.id = Price.product_id'
        ),
        'conditions' => array(
            'Company.name LIKE' => '%'.$search_term.'%',
            'Product.feature' => $product_feature,
            'Price.price <' => $price
        ),
    
     ));
    

    しかしもし 製品を入手したい すべての基準 (会社と価格)のみINNER JOINを使用する必要があります 、およびGROUP BY 製品(group オプション)。

    また、多くの価格と会社の結果を含むすべての製品を取得し、モデルリレーションを設定/リンクする場合は、containを使用できます。 次のようなオプション:

    $contain = array(
        'Company' => array(
            // ...
            'conditions' => array('Company.name LIKE' => '%'.$search_term.'%'),
            // ...
        ),
        'Price' => array(
            // you can set: 'fields' => array('id', ...),
            'conditions' => array('Price.price <' => $price),
            // you can set order: 'ordder' => '....'                
        )
    );
    
    $this->Product->attach('Containable');
    $post = $this->Product->find('all', array(
        // ...
        'contain' => $contain,
        'conditions' => array('Product.feature' => $product_feature),
        // ...
    )); 
    

    したがって、feature => $product_feautreのすべての製品を取得できます 、およびLEFT JOINを取得します この製品の会社と価格。

    これがお役に立てば幸いです。




    1. Ubuntu16.10でPostgreSQLを9.6から10.0にアップグレードします

    2. PHP/MySQLでランクを計算する

    3. テーブル関数とパイプライン関数の違いは?

    4. Mysql列挙型からtinyint問題へ