| 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 5Zř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 5To 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: 14 let
|
|||
0