Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

CakePHP - Mencari 3 tabel secara efisien menggunakan JOIN

Saya lebih suka kode yang lebih sedikit dengan konvensi penamaan model kue/tabel (tabel db products - nama model Product , tabel db prices - nama model Price ) untuk manajemen proyek lebih lanjut. Sepertinya Anda ingin melakukan:

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

 ));

tetapi jika Anda ingin mendapatkan produk dengan semua kriteria . Anda (perusahaan dan harga) hanya , Anda harus menggunakan INNER JOIN , dan GROUP BY Produk (group pilihan).

Juga, jika Anda ingin mendapatkan semua produk dengan banyak harga dan hasil perusahaan dan Anda mengatur/menghubungkan model hubungan, Anda dapat menggunakan contain pilihan, seperti:

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

Jadi Anda akan mendapatkan semua produk dengan feature => $product_feautre , dan Anda mendapatkan LEFT JOIN perusahaan dan harga untuk produk ini.

Semoga membantu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Kotak masukan pelengkapan otomatis/saran menggunakan jQuery atau Ajax dengan kotak kedua berdasarkan pilihan pertama dengan banyak item

  2. mendeteksi kesalahan mysql tanpa menjalankannya

  3. menampilkan data dalam satu baris (dari beberapa baris)

  4. Lewati Daftar<string> Ke Parameter SQL

  5. Mysql tidak akan mulai setelah memutakhirkan Mac OS X Yosemite (Mac OS 10.10)