Autor Zpráva
Jendák
Profil *
Ahoj,
prvně v životě spojuju tabulky a už jsem narazil na něco, s čím si nevím rady.
Mám 3 tabulky (název a sloupce):
users - USER_ID Jméno Příjmení
follow - USER1_ID USER2_ID --- (USER1_ID sleduje, USER2_ID je sledován)
dashboardPosts - POST_ID USER_ID a další sloupce

Chci vybrat z tabulky dashboardPosts, příspěvky napsané lidmi, které sleduju a nebo jsem ty příspěvky psal já (vlastně něco jako FB), vše seřazeno podle post_id (to odpovídá i časově).

Sestavil jsem zatím takovýhle SQL příkaz.
$lastpostsresult = mysql_query("SELECT * FROM dashboardPosts JOIN follow ON dashboardPosts.user_id = follow.user2_id WHERE follow.user1_id='".$user_id."' or dashboardPosts.user_id='".$user_id."' ORDER BY dashboardPosts.post_id DESC LIMIT 20")

(Přeložím si to do své řeči, co si myslím, že by to mělo dělat: "Vyber vše z tabulky dashboardPosts spojeno s follow (přičemž dashboardPosts.user_id a follow.user2_id se rovná) kde follow.user1_id obsahuje hodnotu proměnné user_id NEBO kde dashboardPosts obsahuje hodnotu proměnné user_id.")
Výběr funguje, jen příspěvky které jsem napsal sám, se vypíšou dvakrát (hned za sebou). Když ale umažu or dashboardPosts.user_id='".$user_id."' nezobrazí se to ani jednou! (Příspěvky napsané jinými uživateli se vypíšou normálně jednou.)
Nevím si rady proč se to vypíše buď dvakrát, nebo ani jednou. Budu vám moc vděčnej za jakýkoliv rady. Děkuji
DJ Miky
Profil
Dvojitý výpis se vyřeší pomocí GROUP BY dashboardPosts.post_id, ale ještě je potřeba ošetřit další případ - takhle by se uživateli, který nikoho nesleduje, nezobrazily ani jeho vlastní příspěvky. To se může vyřešit pomocí LEFT JOINu:

$lastpostresult = mysql_query('SELECT *
FROM dashboardPosts
LEFT JOIN follow ON (dashboardPosts.user_id = follow.user2_id AND follow.user1_id = '.$user_id.')
WHERE follow.user1_id IS NOT NULL
    OR dashboardPosts.user_id = '.$user_id.'
GROUP BY dashboardPosts.post_id
ORDER BY dashboardPosts.post_id DESC
LIMIT 20');
Jendák
Profil *
Ano! :) Díky moc DJ MIKU! :) - tak rychlou odpověď jsem nečekal. Funguje to přesně jak jsem chtěl

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: