Er zijn 2 problemen:
- Je hebt een
LEFT JOIN
nodig op vrienden. EENLEFT JOIN
zegt om alle records van de eerste tabel in de join te retourneren, zelfs als er geen resultaten zijn gevonden in de tweede tabel in de join.U moet ook deWHERE
clausule voorwaarden met betrekking totfriends
in deLEFT JOIN
clausule, zodat de voorwaarden zich voordoen bij de join. Je zou ookm.id
. moeten gebruiken waar mogelijk in je joins in plaats van$myId
om redundantie te elimineren. - Uw WHERE-clausule is te beperkend (overbodige voorwaarden). Gebruik altijd de eenvoudigst mogelijke set voorwaarden en plaats er zoveel als nodig zijn bij de
JOIN
zodat ze gemakkelijker te lezen zijn.
Voorbeeld (bewerkt om ook berichten van vrienden toe te voegen):
$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";