Ada 2 masalah:
- Anda memerlukan
LEFT JOIN
pada teman.LEFT JOIN
mengatakan untuk mengembalikan semua record dari tabel pertama di join meskipun tidak ada hasil yang ditemukan di tabel kedua di join. Anda juga harusWHERE
ketentuan klausa yang berkaitan denganfriends
ke dalamLEFT JOIN
klausa, sehingga kondisi terjadi pada join. Anda juga harus menggunakanm.id
sedapat mungkin dalam bergabung Anda alih-alih$myId
untuk menghilangkan redundansi. - Klausa WHERE Anda terlalu membatasi (kondisi berlebihan). Selalu gunakan kondisi yang paling sederhana, dan masukkan sebanyak mungkin yang sesuai di
JOIN
jadi lebih mudah dibaca.
Contoh (Diedit untuk menambahkan kiriman dari teman juga):
$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";