sql >> Databáze >  >> RDS >> Mysql

MYSQL JOIN na více tabulkách nevrací žádné výsledky

Existují 2 problémy:

  1. Potřebujete LEFT JOIN na přátelích. LEFT JOIN říká, že se mají vrátit všechny záznamy z první tabulky ve spojení, i když nebyly nalezeny žádné výsledky v druhé tabulce spojení. Měli byste také WHERE podmínky klauzule týkající se friends do LEFT JOIN klauzule, aby podmínky nastaly při spojení. Měli byste také používat m.id kdekoli je to možné ve vašich spojeních namísto $myId k odstranění redundance.
  2. Vaše klauzule WHERE je příliš omezující (nadbytečné podmínky). Vždy používejte co nejjednodušší sadu podmínek a do JOIN vložte tolik, kolik je vhodné takže se lépe čtou.

Příklad (upraveno pro přidání příspěvků také od přátel):

$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. MariaDB UCASE() Vysvětleno

  2. SQL Views:Jak pracovat s Views v SQL?

  3. Maximální velikost tabulky pro databázi MySQL

  4. Měření výkonu databáze pod tlakem