Autor | Zpráva | ||
---|---|---|---|
hexcross Profil |
#1 · Zasláno: 21. 3. 2013, 12:09:31
Zdravím!
Snažím se už několik dní ale nevím si rady... mám 2 tabulky : [forum_topics] ------ id | title [forum_posts] ------ id | topic | text Nyní chci vypsat 5 posledních příspěvků z [forum_posts] - ALE nechci aby se duplicitně vypisovali z jednoho tématu! Tzn. že každý vypsaný příspěvěk musí pocházet z unikátního tématu. SQL dotaz skládám v dibi : Zkoušel jsem distinct: $sqlForumLatest = dibi::select('p.topic,p.user_id,p.date,p.text,t.title')->setFlag('distinct') ->from('[forum_posts]')->as('p') ->leftJoin('[forum_topics]')->as('t')->on('p.topic = t.id') ->orderBy('p.id DESC')->limit('5'); SQL: SELECT p.user_id,p.date, p.topic,p.text, t.title FROM `forum_posts` AS `p` LEFT JOIN `forum_topics` AS `t` ON p.topic = t.id GROUP BY `p`.`topic` ORDER BY p.id DESC LIMIT 5 Zřejmě to nebere v potaz. Zkoušel jsem groupBy : $sqlForumLatest = dibi::select('p.user_id,p.date, p.topic,p.text, t.title') ->from('[forum_posts]')->as('p')->groupBy("p.topic") ->leftJoin('[forum_topics]')->as('t')->on('p.topic = t.id') ->limit('5')->orderBy('p.id DESC'); SQL: SELECT DISTINCT p.topic,p.user_id,p.date,p.text,t.title FROM `forum_posts` AS `p` LEFT JOIN `forum_topics` AS `t` ON p.topic = t.id ORDER BY p.id DESC LIMIT 5 To zase nevypíše duplicitní téma ale zase nevypíše poslední příspěvek z tématu ale první! (ignoruje orderBy?) Nápady? Díky. |
||
Tori Profil |
#2 · Zasláno: 21. 3. 2013, 12:52:28
A něco takovéhoto?
SELECT p.*, ref.title FROM forum_posts p INNER JOIN ( SELECT MAX(p2.id) maxId, t.title FROM forum_topics t INNER JOIN forum_posts p2 ON p2.topic = t.id GROUP BY t.id ORDER BY maxId DESC LIMIT 5 ) ref ON ref.maxId = p.id |
||
Kajman Profil |
A kdyby to bylo pomalé, mohla by pomoci drobná změna, kdy se groupuje až po omezení pěti topiců.
SELECT p.*, t.title FROM forum_posts p INNER JOIN (SELECT Max(p2.id) maxId, pt.topic FROM (SELECT DISTINCT p3.topic FROM forum_posts p3 ORDER BY p3.id DESC LIMIT 5) pt INNER JOIN forum_posts p2 ON p2.topic = pt.topic GROUP BY pt.topic) ref ON ref.maxid = p.id INNER JOIN forum_topics t ON t.id = ref.topic ORDER BY p.id DESC |
||
hexcross Profil |
#4 · Zasláno: 21. 3. 2013, 14:56:14
Děkuji oběma! Použil jsem řešení od Tori, vlastně jen protože je kratší :-) ale fungují správně obě...
Nenapadlo by mě že to bude tak složité, heh. |
||
Časová prodleva: 11 let
|
0