Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL JOIN на множество таблици не връща резултати

Има 2 проблема:

  1. Имате нужда от LEFT JOIN на приятели. A 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. MySQL Изчислете процента

  2. СЪЗДАЙТЕ ТИП на MySQL

  3. Местоположение на таблиците на базата данни - MySQL - Windows XP

  4. Как да получите няколко броя с една заявка в MySQL

  5. MySql count() за връщане на 0, ако няма намерени записи