Det finns två problem:
- Du behöver en
LEFT JOIN
på vänner. EnLEFT JOIN
sä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å markeraWHERE
klausulvillkor relaterade tillfriends
tillLEFT JOIN
klausul, så att villkoren uppstår vid sammanfogningen. Du bör också användam.id
där det är möjligt i dina anslutningar istället för$myId
fö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
JOIN
så 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";