2つの問題があります:
-
LEFT JOIN
が必要です 友達に。LEFT JOIN
結合の2番目のテーブルに結果が見つからない場合でも、結合の最初のテーブルからすべてのレコードを返すように指示します。WHERE
も必要です。friends
に関連する条項の条件LEFT JOIN
に 節、条件が結合で発生するように。m.id
も使用する必要があります$myId
の代わりに、可能な限り結合で 冗長性を排除します。 - WHERE句が制限されすぎています(冗長条件)。常に可能な限り単純な条件のセットを使用し、
JOIN
に適切な数を配置します 読みやすくなります。
例(友達からの投稿も追加するために編集):
$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";