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

कोई परिणाम नहीं लौटाने वाली एकाधिक तालिकाओं पर MYSQL जॉइन करें

2 समस्याएं हैं:

  1. आपको एक LEFT JOIN की आवश्यकता है दोस्तों पर। एक LEFT JOIN शामिल होने में पहली तालिका से सभी रिकॉर्ड वापस करने के लिए कहते हैं, भले ही शामिल होने में दूसरी तालिका में कोई परिणाम न मिले। आपको WHERE भी करना चाहिए friends . से संबंधित खंड की शर्तें LEFT JOIN . में खंड, ताकि शामिल होने पर स्थितियां उत्पन्न हों। आपको m.id . का भी उपयोग करना चाहिए $myId . के बजाय आपके जॉइन में जहां भी संभव हो अतिरेक को खत्म करने के लिए।
  2. आपका WHERE क्लॉज बहुत अधिक प्रतिबंधात्मक (अनावश्यक शर्तें) है। हमेशा संभव स्थितियों के सबसे सरल सेट का उपयोग करें, और JOIN . पर जितने उपयुक्त हों, डाल दें इसलिए उन्हें पढ़ना आसान होता है।

उदाहरण (दोस्तों से भी पोस्ट जोड़ने के लिए संपादित):

$query = "SELECT DISTINCT `u`.`id`, `p`.`byuser`, `p`.`newpost`, `p`.`id`, `p`.`postdate`
          FROM `users` AS `u`
          LEFT JOIN `friends` AS `f` 
              ON `f`.`userid` = `u`.`id` 
              OR `f`.`friendid` = `u`.`id`
          JOIN `pinnwand` AS `p` 
              /* This will get all posts made by the user */
              ON `p`.`byuser` = `u`.`id` 
              /* This will get all posts made TO the user by friends */
              OR (`p`.`byuser` IN (`f`.`userid`, `f`.`friendid`)
                  AND `p`.`touser` = `u`.`id`)
          WHERE `u`.`id` = {$myId}
              AND `p`.`publicp` < 3 
              AND `p`.`typ` = 2
          ORDER BY `p`.`id` DESC 
          LIMIT {$limit}, 10";


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लैटिन1 एन्कोडेड कॉलम में UTF-8 वर्णों का पता कैसे लगाएं - MySQL

  2. SPARQL क्वेरी एक नोड के सभी जनक प्राप्त करने के लिए

  3. PHP का उपयोग करके MySQL डेटा के साथ HTML फॉर्म भरना शून्य हो रहा है

  4. एक या दो कॉलम के आधार पर सभी डुप्लीकेट पंक्तियों का चयन करें?

  5. SQLAlchemy JSON बूँद/पाठ के रूप में