shoutbox ----- id (int) ts (timestamp) userid (int) shout (text)
user ----- id (int) name (varchar)
Jeg vil gerne lave et query, hvor jeg får de ex. 25 seneste indlæg fra shout, hvilken bruger der har skrevet indlægget - samt (det jeg ikke kan finde ud af) hvor mange indlæg denne bruger har skrevet:
Her er hvad jeg er nået til : SELECT b.name,a.ts,a.shout, b.id,md5(a.id), COUNT(b.id) FROM shoutbox a LEFT JOIN users b ON a.userid = b.id GROUP BY (a.id) ORDER BY a.ts desc
Problemet er at jeg bare får 1 i COUNT - og det er jo fordi der kun er skrevet 1 indlæg fra denne bruger - med dette id
Jeg kunne virkelig godt bruge en hjælpende hånd her :-)
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
En anden god grund til at gøre det sådan er at der sandsynigvis bliver spurgt på antal indlæg (dvs. visninger) mange flere gange en antallet ændres (opdateringer).
Selv om du på denne måde får redundans i dine data (antallet kan aflæses ved at tælle i shoutbox-tabellen, og i user-tabellen), så kører det hurtigere.
Opdatering af tabellerne shoutbox og user bør så til gengæld ske i en transaktion, så du er sikker på de begge bliver ændret.
Synes godt om
Slettet bruger
25. juli 2008 - 10:11#4
Ellers kan du bruge inner select. Det performer ikke helt så godt, hvis du har mange brugere, men så slipper du for afledet data.
SELECT `user`.`name`, `shoutbox`.`ts`, `shout`.`shout`, `shout`.`id`, `entries`.`entries` FROM `shoutbox` LEFT JOIN `user` ON ( `shoutbox`.`userid` = `user`.`id` ) LEFT JOIN ( SELECT COUNT() AS `entries`, `userid` FROM `shoutbox` GROUP BY `userid` ) AS `entries` ON ( `user`.`id` = `entries`.`userid` ) ORDER BY `shoutbox`.`ts` DESC
Ja, jeg ville nu bare counte '*' istedet for b.id:
SELECT b.name,a.ts,a.shout, b.id,md5(a.id), COUNT(*) FROM shoutbox a LEFT JOIN users b ON a.userid = b.id GROUP BY (a.id) ORDER BY a.ts desc
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.