sql >> Database >  >> RDS >> Mysql

MYSQL JOIN op meerdere tafels geeft geen resultaten

Er zijn 2 problemen:

  1. Je hebt een LEFT JOIN nodig op vrienden. EEN LEFT JOIN zegt om alle records van de eerste tabel in de join te retourneren, zelfs als er geen resultaten zijn gevonden in de tweede tabel in de join.U moet ook de WHERE clausule voorwaarden met betrekking tot friends in de LEFT JOIN clausule, zodat de voorwaarden zich voordoen bij de join. Je zou ook m.id . moeten gebruiken waar mogelijk in je joins in plaats van $myId om redundantie te elimineren.
  2. Uw WHERE-clausule is te beperkend (overbodige voorwaarden). Gebruik altijd de eenvoudigst mogelijke set voorwaarden en plaats er zoveel als nodig zijn bij de JOIN zodat ze gemakkelijker te lezen zijn.

Voorbeeld (bewerkt om ook berichten van vrienden toe te voegen):

$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. Inzicht in Workload Analyzer om prestatieknelpunten in kaart te brengen

  2. Behandeling van seed-gegevens in R12.2 online patching

  3. Dynamische tabelnaam voor SQL-query in FOR

  4. MySQL-wachtwoord beschermen bij het ontwikkelen in Python?