Der er 2 problemer:
- Du skal bruge en
LEFT JOIN
på venner. EnLEFT JOIN
siger, 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å angiveWHERE
klausul betingelser relateret tilfriends
ind iLEFT JOIN
klausul, således at forholdene opstår ved sammenføjningen. Du bør også brugem.id
hvor det er muligt i dine joins i stedet for$myId
for 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
JOIN
så 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";