FAQ |
Kalender |
![]() |
#14 | ||
|
|||
Klarade millennium-buggen
|
Jag tänkte även förklara lite hur jag tänkt när jag löste problemet.
Grundprincipen är att dela upp ett stort problem i sina atomära beståndsdelar. Det var ju från början två olika tabeller och man vill ha ut senaste datum grupperat på threadid i var och en av dessa två tabeller. För att hämta ut senaste datum från threads-tabellen så behöver man skriva så här: Kod:
SELECT threadid, MAX(createddate) AS senastedatum from wn.threads GROUP BY threadid Kod:
SELECT threadid, MAX(created) AS senastedatum from wn.posts GROUP BY threadid Sen vill vi bara ha ut det senaste av dessa sammanslagna tabeller och då slår man bara ihop dessa tabeller med en UNION: Kod:
SELECT threadid, MAX(createddate) AS senastedatum from wn.threads GROUP BY threadid UNION SELECT threadid, MAX(created) AS senastedatum from wn.posts GROUP BY threadid Men då får vi fler rader per thread och det vill vi inte ha utan endast ett datum per thread. Då behöver vi göra ytterligare en gruppering. Men Group By funkar bara på EN tabell så vi måste först skapa en enda tabell av denna UNION-statement, vi ger tabellen ett alias som 'x': Kod:
SELECT * FROM ( SELECT threadid, MAX(createddate) AS senastedatum from wn.threads GROUP BY threadid UNION SELECT threadid, MAX(created) AS senastedatum from wn.posts GROUP BY threadid ) x Och sen gör vi bara en gruppering och bakvänd sortering på hela kalaset, så var det fixat, lätt som en plätt: Kod:
SELECT threadid, MAX(senastedatum) as senastedatum FROM ( SELECT threadid, MAX(createddate) AS senastedatum from wn.threads GROUP BY threadid UNION SELECT threadid, MAX(created) AS senastedatum from wn.posts GROUP BY threadid ) x GROUP BY threadid ORDER BY senastedatum DESC; Senast redigerad av Conny Westh den 2013-01-31 klockan 11:27 |
||
![]() |
![]() |
|
|