Er zijn 2 problemen:
- Je hebt een
LEFT JOINnodig op vrienden. EENLEFT JOINzegt 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 deWHEREclausule voorwaarden met betrekking totfriendsin deLEFT JOINclausule, zodat de voorwaarden zich voordoen bij de join. Je zou ookm.id. moeten gebruiken waar mogelijk in je joins in plaats van$myIdom 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
JOINzodat 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";