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

MYSQL JOIN di beberapa tabel tidak mengembalikan hasil

Ada 2 masalah:

  1. Anda memerlukan LEFT JOIN pada teman. LEFT JOIN mengatakan untuk mengembalikan semua record dari tabel pertama di join meskipun tidak ada hasil yang ditemukan di tabel kedua di join. Anda juga harus WHERE ketentuan klausa yang berkaitan dengan friends ke dalam LEFT JOIN klausa, sehingga kondisi terjadi pada join. Anda juga harus menggunakan m.id sedapat mungkin dalam bergabung Anda alih-alih $myId untuk menghilangkan redundansi.
  2. Klausa WHERE Anda terlalu membatasi (kondisi berlebihan). Selalu gunakan kondisi yang paling sederhana, dan masukkan sebanyak mungkin yang sesuai di JOIN jadi lebih mudah dibaca.

Contoh (Diedit untuk menambahkan kiriman dari teman juga):

$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. Prosedur tersimpan di Ruby on Rails

  2. mysql_real_escape_string tidak terdefinisi

  3. mySQL regex di klausa where

  4. Apa Setara MySQL dari STUFF() di SQL Server?

  5. pelanggaran batasan php Kesalahan 1452