Mysql
 sql >> база данни >  >> RDS >> Mysql

CakePHP - Ефективно търсене в 3 таблици с помощта на JOIN

Предпочитам по-малко код с конвенцията за именуване на модел на торта/таблица (db table products - име на модела Product , db таблица prices - име на модела Price ) за по-нататъшно управление на проекта. Изглежда, че искате да направите:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкнете DateTime в MySql база данни с помощта на C# код

  2. Показване на BLOB изображение на PHP MySQL заедно с други данни

  3. Задействайте тригер след актуализацията на конкретни колони в MySQL

  4. настройка на virtualenv за разработка на django на windows,

  5. Проблеми с кодирането на текст в MySQL C#