Existem 2 problemas:
- Você precisa de um
LEFT JOIN
em amigos. UmLEFT 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 oWHERE
condições de cláusula relativas afriends
noLEFT JOIN
cláusula, para que as condições ocorram na junção. Você também deve usarm.id
sempre que possível em suas junções em vez de$myId
para eliminar a redundância. - 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";