Mysql
 sql >> Base de données >  >> RDS >> Mysql

MYSQL JOIN sur plusieurs tables ne renvoyant aucun résultat

Il y a 2 problèmes :

  1. Vous avez besoin d'un LEFT JOIN sur des amis. Une LEFT JOIN indique de renvoyer tous les enregistrements de la première table de la jointure même s'il n'y a aucun résultat trouvé dans la deuxième table de la jointure. Vous devez également indiquer WHERE clause conditions relatives aux friends dans le LEFT JOIN clause, de sorte que les conditions se produisent à la jointure. Vous devriez également utiliser m.id dans la mesure du possible dans vos jointures au lieu de $myId pour éliminer la redondance.
  2. Votre clause WHERE est trop restrictive (conditions redondantes). Utilisez toujours l'ensemble de conditions le plus simple possible et mettez-en autant que nécessaire dans le JOIN afin qu'ils soient plus faciles à lire.

Exemple (Modifié pour ajouter également des publications d'amis) :

$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";