Hay 2 problemas:
- Necesitas un
LEFT JOIN
en amigos ALEFT 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 debeWHERE
clausula condiciones relativas afriends
en elLEFT JOIN
cláusula, de modo que las condiciones se produzcan en la unión. También debería usarm.id
siempre que sea posible en sus uniones en lugar de$myId
para 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
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";