Existem 2 problemas:
- Você precisa de um
LEFT JOINem amigos. UmLEFT JOINdiz 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 oWHEREcondições de cláusula relativas afriendsnoLEFT JOINcláusula, para que as condições ocorram na junção. Você também deve usarm.idsempre que possível em suas junções em vez de$myIdpara 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
JOINpara 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";