Det finns två problem:
- Du behöver en
LEFT JOINpå vänner. EnLEFT JOINsäger att alla poster från den första tabellen i kopplingen ska returneras även om det inte finns några resultat i den andra tabellen i kopplingen. Du bör också markeraWHEREklausulvillkor relaterade tillfriendstillLEFT JOINklausul, så att villkoren uppstår vid sammanfogningen. Du bör också användam.iddär det är möjligt i dina anslutningar istället för$myIdför att eliminera redundans. - Din WHERE-sats är för restriktiv (överflödiga villkor). Använd alltid den enklaste uppsättningen av villkor som möjligt och sätt så många som lämpligt vid
JOINså de är lättare att läsa.
Exempel (Redigerad för att lägga till inlägg från vänner också):
$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";