Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

CakePHP - Tìm kiếm 3 bảng hiệu quả bằng cách sử dụng JOIN

Tôi thích ít mã hơn với mẫu bánh / quy ước đặt tên bảng (db table products - tên kiểu máy Product , bảng db prices - tên kiểu máy Price ) để quản lý dự án thêm. Có vẻ như Bạn muốn làm:

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

 ));

nhưng nếu Bạn muốn nhận sản phẩm với tất cả các tiêu chí của bạn (công ty và giá cả) chỉ , Bạn nên sử dụng INNER JOINGROUP BY Sản phẩm (group tùy chọn).

Ngoài ra, nếu Bạn muốn nhận được tất cả các sản phẩm với nhiều mức giá và kết quả của công ty và Bạn thiết lập / liên kết quan hệ mô hình, Bạn có thể sử dụng contain tùy chọn, như:

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

Vì vậy, Bạn sẽ nhận được tất cả các sản phẩm có feature => $product_feautre và Bạn nhận được LEFT JOIN công ty và giá cả của sản phẩm này.

Hy vọng điều này sẽ hữu ích.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính trung bình của cột từ truy vấn MYSQL

  2. Kết nối không thành công:Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ) từ hàm php

  3. Làm thế nào để sử dụng kiểu int / long không dấu với Entity Framework?

  4. Mysql có tương đương với các chức năng phân tích của Oracle không?

  5. Tại sao tôi vẫn cần cài đặt MySQL Connector trên máy tính mặc dù có các gói NuGet thích hợp?