Hay 2 problemas:
- Necesitas un
LEFT JOINen amigos ALEFT JOINdice 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 debeWHEREclausula condiciones relativas afriendsen elLEFT JOINcláusula, de modo que las condiciones se produzcan en la unión. También debería usarm.idsiempre que sea posible en sus uniones en lugar de$myIdpara eliminar la redundancia. - 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
JOINpara 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";