Autor | Zpráva | ||
---|---|---|---|
Jendák Profil * |
#1 · Zasláno: 21. 5. 2012, 19:08:52
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 |
#2 · Zasláno: 21. 5. 2012, 19:16:54
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 JOIN u:
$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 * |
#3 · Zasláno: 21. 5. 2012, 19:22:45
Ano! :) Díky moc DJ MIKU! :) - tak rychlou odpověď jsem nečekal. Funguje to přesně jak jsem chtěl
|
||
Časová prodleva: 11 let
|
0