FAQ |
Kalender |
![]() |
#10 | ||
|
|||
Klarade millennium-buggen
|
Jag la upp lite testdata och längst ner hittar du en möjlig lösnin på ditt problem.
Jag ändrade en del kolumnnamn så det dels blir lättare att följa koden och dels så den stämmer med god programmeringssed "id" är inget bra namn på en kolumn särskilt inte om den förekommer i flera tabeller, så jag har gett varje Primärnyckel unika namn enligt god programmeringssed. Först skapar vi databasstrukturen: Kod:
delimiter ; CREATE TABLE `user` ( `userid` varchar(45) NOT NULL, `username` varchar(45) NOT NULL, PRIMARY KEY (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `threads` ( `threadid` int(11) NOT NULL AUTO_INCREMENT, `threadname` varchar(45) NOT NULL, `createddate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `closed` bit(1) NOT NULL DEFAULT b'0', `creatorid` varchar(45) NOT NULL, PRIMARY KEY (`threadid`), KEY `fk_creatorid_idx` (`creatorid`), CONSTRAINT `fk_creatorid` FOREIGN KEY (`creatorid`) REFERENCES `user` (`userid`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; CREATE TABLE `posts` ( `postid` int(11) NOT NULL AUTO_INCREMENT, `threadid` int(11) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `deleted` bit(1) NOT NULL DEFAULT b'0', `creatorid` varchar(45) NOT NULL, `comment` varchar(255) DEFAULT NULL, `posttext` varchar(10000) NOT NULL, PRIMARY KEY (`postid`), KEY `fk_creatorid_idx` (`creatorid`), KEY `fk_posts_threadid_idx` (`threadid`), CONSTRAINT `fk_posts_creatorid` FOREIGN KEY (`creatorid`) REFERENCES `user` (`userid`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_posts_threadid` FOREIGN KEY (`threadid`) REFERENCES `threads` (`threadid`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=latin1; sen slänger vi in lite smart testdata: Kod:
INSERT INTO `wn`.`user` (`userid`, `username`) VALUES ('anna', 'Anna Anderberg'); INSERT INTO `wn`.`user` (`userid`, `username`) VALUES ('bertil', 'Bertil Bertilsson'); INSERT INTO `wn`.`user` (`userid`, `username`) VALUES ('cecilia', 'Cecilia Cederberg'); INSERT INTO `wn`.`user` (`userid`, `username`) VALUES ('david', 'David Davidsson'); INSERT INTO `wn`.`threads` (`threadid`, `threadname`, `createddate`, `closed`, `creatorid`) VALUES ('1', 'Nu är det vår igen', '2013-01-01 00:00:00', 0, 'anna'); INSERT INTO `wn`.`threads` (`threadid`, `threadname`, `createddate`, `closed`, `creatorid`) VALUES ('2', 'Titta vad jag hittade för kul på internet', '2013-01-02 00:00:00', 0, 'bertil'); INSERT INTO `wn`.`threads` (`threadid`, `threadname`, `createddate`, `closed`, `creatorid`) VALUES ('3', 'Kan man bli bättre än så här?', '2013-01-03 00:00:00', 0, 'bertil'); INSERT INTO `wn`.`threads` (`threadid`, `threadname`, `createddate`, `closed`, `creatorid`) VALUES ('4', 'Är hästar däggdjur?', '2013-01-04 00:00:00', 0, 'anna'); INSERT INTO `wn`.`threads` (`threadid`, `threadname`, `createddate`, `closed`, `creatorid`) VALUES ('5', 'Fullt med nya idéer', '2013-01-05 00:00:00', 0, 'bertil'); INSERT INTO `wn`.`threads` (`threadid`, `threadname`, `createddate`, `closed`, `creatorid`) VALUES ('6', 'Vårt gemensamma mål!', '2013-01-06 00:00:00', 0, 'anna'); INSERT INTO `wn`.`posts` (`threadid`, `created`, `creatorid`, `posttext`) VALUES ('1', '2013-01-04 00:00:00', 'anna', 'Berättar denna text något vettigt?'); INSERT INTO `wn`.`posts` (`threadid`, `created`, `creatorid`, `posttext`) VALUES ('1', '2013-01-05 00:00:00', 'bertil', 'Inte den här heller!'); INSERT INTO `wn`.`posts` (`threadid`, `created`, `creatorid`, `posttext`) VALUES ('3', '2013-01-03 00:00:00', 'david', 'Men nu får du väl ge dig?'); INSERT INTO `wn`.`posts` (`threadid`, `created`, `creatorid`, `posttext`) VALUES ('3', '2013-01-04 00:00:00', 'cecilia', 'Kanske för den här gången då?'); Sists så kör vi en fråga för att få fram alla trådarna sorterade efter senaste postningsdatum om det finns ett sånt annars får det bli trådens skapandedatum: 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 10:58 |
||
![]() |
![]() |
|
|