sql >> Base de Datos >  >> RDS >> Mysql

MYSQL JOIN en varias tablas que no devuelven resultados

Hay 2 problemas:

  1. Necesitas un LEFT JOIN en amigos A LEFT JOIN dice que devuelva todos los registros de la primera tabla en la combinación incluso si no se encuentran resultados en la segunda tabla en la combinación. También debe WHERE clausula condiciones relativas a friends en el LEFT JOIN cláusula, de modo que las condiciones se produzcan en la unión. También debería usar m.id siempre que sea posible en sus uniones en lugar de $myId para eliminar la redundancia.
  2. Su cláusula WHERE es demasiado restrictiva (condiciones redundantes). Utilice siempre el conjunto de condiciones más simple posible y coloque tantas como corresponda en JOIN para que sean más fáciles de leer.

Ejemplo (Editado para agregar publicaciones de amigos también):

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