Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

केकेपीएचपी - जॉइन का उपयोग करके कुशलता से 3 टेबल खोजना

मुझे कम कोड पसंद है केक मॉडल/टेबल नामकरण परंपरा के साथ (डीबी टेबल products - मॉडल का नाम products , डीबी टेबल 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
    ),

 ));

लेकिन अगर आप के साथ उत्पाद get प्राप्त करना चाहते हैं आपके सभी मानदंड (कंपनी और कीमत) केवल , आपको 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 get मिलता है कंपनियों और इस उत्पादों के लिए कीमतें।

आशा है कि यह मदद करता है।




  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 कॉलम चुनें और डेटा मर्ज करें

  2. php password_verify डेटाबेस के साथ काम नहीं कर रहा है

  3. एक्लिप्सलिंक जेटीए अनुक्रम कनेक्शन पूल को कैसे कॉन्फ़िगर करें

  4. किसी ऑब्जेक्ट में कस्टम JdbcTemplate क्वेरी परिणाम मैप करें

  5. MySQL डेटाबेस में अक्षांश/देशांतर संग्रहीत करते समय उपयोग करने के लिए आदर्श डेटा प्रकार क्या है?