Има 2 проблема:
- Имате нужда от
LEFT JOINна приятели. ALEFT JOINказва да върне всички записи от първата таблица в обединението, дори ако няма намерени резултати във втората таблица в обединението. Трябва също такаWHEREусловия на клауза, отнасящи се доfriendsвLEFT JOINклауза, така че условията да възникнат при присъединяването. Трябва също да използватеm.idкъдето е възможно във вашите обединявания вместо$myIdза премахване на излишъка. - клаузата ви WHERE е твърде ограничителна (излишни условия). Винаги използвайте възможно най-простия набор от условия и поставете възможно най-много в
JOINтака че са по-лесни за четене.
Пример (Редактирано за добавяне на публикации и от приятели):
$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";