"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
MySQL
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
Dit kan MySQL niet in een query... Normaliter zou je zoiets kunnen oplossen door een subquery toe te voegen die per feed de top3 items opvist. Maar MySQL's gebrekkige subquery-ondersteuning (sowieso pas vanaf v4.1) accepteert geen LIMIT erin 
De naive oplossing is om een losse query uit te voeren waar je maximaal 90 feeds mee ophaalt en dan vervolgens apart per feed de top3 items ophaalt totdat je er genoeg hebt... en ja dat worden in best case 31 en in worst case 91 (tenzij je ook feeds zonder items hebt... dan meer) queries.
Als je per feed, per item de volgorde weet kom je trouwens een stuk beter er vanaf. Maar die volgorde van te voren genereren is ook weer niet triviaal.
[edit]
Om je toch een idee te geven hoe zo'n subquery zou werken:
De naive oplossing is om een losse query uit te voeren waar je maximaal 90 feeds mee ophaalt en dan vervolgens apart per feed de top3 items ophaalt totdat je er genoeg hebt... en ja dat worden in best case 31 en in worst case 91 (tenzij je ook feeds zonder items hebt... dan meer) queries.
Als je per feed, per item de volgorde weet kom je trouwens een stuk beter er vanaf. Maar die volgorde van te voren genereren is ook weer niet triviaal.
[edit]
Om je toch een idee te geven hoe zo'n subquery zou werken:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| SELECT i.*, f.* FROM feeds_items i INNER JOIN feeds f ON i.fid = f.fid WHERE i.iid IN (SELECT iid FROM feeds_items WHERE fid = i.fid ORDER BY timestamp DESC, iid DESC LIMIT 3) ORDER BY i.fid ASC, i.timestamp DESC, i.iid DESC LIMIT 0, 90 |
[ Voor 28% gewijzigd door ACM op 15-01-2006 16:25 ]
Verwijderd
Niets aan toe te voegen, zo zie je maar weer hoe belangrijk het is om de type database te vermelden. Succes met de applicatie