Mysql
 sql >> Baza danych >  >> RDS >> Mysql

CakePHP - Efektywne przeszukiwanie 3 tabel przy użyciu funkcji JOIN

Wolę mniej kodu z konwencją nazewnictwa modeli/tabeli ciastek (tabela db products - nazwa modelu Product , tabela db prices - nazwa modelu Price ) do dalszego zarządzania projektami. Wygląda na to, że chcesz zrobić:

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

 ));

ale jeśli Chcesz otrzymywać produkty z Twoje wszystkie kryteria (firma i cena) tylko , Powinieneś użyć INNER JOIN i GROUP BY Produkt (group opcja).

Ponadto, jeśli chcesz uzyskać wszystkie produkty z wieloma cenami i wynikami firm oraz ustawić/podłączyć relacje modeli, możesz użyć contain opcja, np.:

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

Więc otrzymasz wszystkie produkty z feature => $product_feautre , a otrzymasz LEFT JOIN firmy i ceny tych produktów.

Mam nadzieję, że to pomoże.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować bazę danych MariaDB w Debianie 10?

  2. Przypadek SQL, gdy FROM (UNIX_TIME)

  3. jak uzyskać dostęp do zdalnej bazy danych mysql?

  4. Alternatywa ograniczenia MySQL CHECK

  5. Jak mogę sprawdzić liczbę aktywnych połączeń sqlalchemy w puli w danym momencie?