sql >> Database >  >> RDS >> Mysql

CakePHP - Efficiënt zoeken in 3 tabellen met JOIN

Ik heb liever minder code met cakemodel/tabelnaamgevingsconventie (db table products - modelnaam Product , db tabel prices - modelnaam Price ) voor verder projectmanagement. Het lijkt erop dat u het volgende wilt doen:

$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
    ),

 ));

maar als U wilt producten met Uw alle criteria (bedrijf en prijs) alleen , Gebruik INNER JOIN , en GROUP BY Product (group optie).

Ook als u alle producten met veel prijzen en bedrijfsresultaten wilt krijgen en u modelrelaties instelt/linkt, kunt u contain gebruiken optie, zoals:

$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),
    // ...
)); 

U krijgt dus alle producten met feature => $product_feautre , en je krijgt LEFT JOIN bedrijven en prijzen voor deze producten.

Ik hoop dat dit helpt.




  1. Waarom retourneert LEFT JOIN van MySQL NULL-records met de WHERE-component?

  2. Een float selecteren in MySQL

  3. Hoe krijg ik een rij-ID in mysql

  4. PSQLEException:ERROR:relatie TABLE_NAME bestaat niet