Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL JOIN em várias tabelas não retornando resultados


Existem 2 problemas:
  1. Você precisa de um LEFT JOIN em amigos. Um LEFT JOIN diz para retornar todos os registros da primeira tabela na junção, mesmo se não houver resultados encontrados na segunda tabela na junção. Você também deve o WHERE condições de cláusula relativas a friends no LEFT JOIN cláusula, para que as condições ocorram na junção. Você também deve usar m.id sempre que possível em suas junções em vez de $myId para eliminar a redundância.
  2. Sua cláusula WHERE é muito restritiva (condições redundantes). Sempre use o conjunto de condições mais simples possível e coloque quantas forem apropriadas no JOIN para que sejam mais fáceis de ler.

Exemplo (Editado para adicionar postagens de amigos também):
$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";