Es gibt 2 Probleme:
- Du brauchst einen
LEFT JOINauf Freunde. EinLEFT JOINbesagt, dass alle Datensätze aus der ersten Tabelle im Join zurückgegeben werden sollen, auch wenn in der zweiten Tabelle im Join keine Ergebnisse gefunden werden. Sie sollten auchWHEREangeben Klauselbedingungen in Bezug auffriendsin denLEFT JOIN-Klausel, sodass die Bedingungen beim Join auftreten. Sie sollten auchm.idverwenden wo immer möglich in Ihren Joins anstelle von$myIdum Redundanzen zu eliminieren. - Ihre WHERE-Klausel ist zu restriktiv (redundante Bedingungen). Verwenden Sie immer den einfachsten Satz von Bedingungen und geben Sie so viele wie nötig beim
JOINein damit sie leichter zu lesen sind.
Beispiel (bearbeitet, um auch Beiträge von Freunden hinzuzufügen):
$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";