Der er 2 problemer:
- Du skal bruge en
LEFT JOINpå venner. EnLEFT JOINsiger, at alle poster fra den første tabel i joinforbindelsen skal returneres, selvom der ikke findes resultater i den anden tabel i joinforbindelsen. Du skal også angiveWHEREklausul betingelser relateret tilfriendsind iLEFT JOINklausul, således at forholdene opstår ved sammenføjningen. Du bør også brugem.idhvor det er muligt i dine joins i stedet for$myIdfor at eliminere redundans. - Din WHERE-sætning er for restriktiv (overflødige betingelser). Brug altid det enklest mulige sæt betingelser, og sæt så mange som passende ved
JOINså de er nemmere at læse.
Eksempel (Redigeret for også at tilføje indlæg fra venner):
$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";