sql >> Database teknologi >  >> RDS >> Mysql

MYSQL JOIN på flere tabeller giver ingen resultater

Der er 2 problemer:

  1. Du skal bruge en LEFT JOIN på venner. En LEFT JOIN siger, at alle poster fra den første tabel i joinforbindelsen skal returneres, selvom der ikke findes resultater i den anden tabel i joinforbindelsen. Du skal også angive WHERE klausul betingelser relateret til friends ind i LEFT JOIN klausul, således at forholdene opstår ved sammenføjningen. Du bør også bruge m.id hvor det er muligt i dine joins i stedet for $myId for at eliminere redundans.
  2. Din WHERE-sætning er for restriktiv (overflødige betingelser). Brug altid det enklest mulige sæt betingelser, og sæt så mange som passende ved JOIN så de er nemmere at læse.

Eksempel (Redigeret for også at tilføje indlæg fra venner):

$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. Oracle-understøttede versioner Matrix

  2. Den angivne nøgle var for lang; max nøglelængde er 1000 bytes

  3. Send fil med postbud til Laravel API

  4. Hvad er LIMIT-klausulalternativet i JPQL?