Een vraagje over een query die ik net gemaakt heb, maar die niet echt een denderende performance geeft...
Dit is de belangrijkste info uit de tabel:
De last entry is de laatste post die gemaakt is in het topic.
Het forum_id is het forum waar het betreffende topic in staat.
De topic_id is uiteraard de unieke key van een topic.
Nu heb ik een querie die als volgende is :
Deze query werkt wel, maar is zo traag dat ik dat liever niet wil gebruiken.
Het stukje dat het traag maakt is dit:
Nu dacht ik dat dit heel gemakkelijk met een HAVING op te lossen was, en dat heb ik ook geprobeert, maar daar kwam ik niet helemaal aan uit.
Ik had iets als dit:
Maar dat geeft deze foutmelding:
Microsoft JET Database Engine error '80004005'
At most one record can be returned by this subquery.
Ik ben er nu al meer dan een uur mee aan het spelen maar ik kom er echt niet uit...
EDIT/
Ik was weer eens veel te moeilijk aan het denken...
Dat doet het gewoon!
Dit is de belangrijkste info uit de tabel:
| topic_id | last_entry | forum_id |
| 1 | 30 | 1 |
| 2 | 31 | 1 |
| 3 | 34 | 1 |
De last entry is de laatste post die gemaakt is in het topic.
Het forum_id is het forum waar het betreffende topic in staat.
De topic_id is uiteraard de unieke key van een topic.
Nu heb ik een querie die als volgende is :
SQL:
1
2
3
4
5
6
| SELECT f.forum_id, f.forum_name, f.topic_no, f.post_no, f.forum_description, f.moderators, f.cat_id, c.cat_name, (SELECT topic_id FROM tbltopics t WHERE last_entry = (SELECT max(last_entry) FROM tbltopics t2 WHERE t2.forum_id = f.forum_id)) AS max_topic_id FROM tblforum f, tblcat c WHERE f.Cat_ID = c.Cat_ID AND f.Forum_ID NOT IN (SELECT not_shown_forum FROM tblShowForums WHERE Page_Type = 'I' AND User_ID =1) ORDER BY f.Cat_ID ASC, f.Forum_Order ASC |
Deze query werkt wel, maar is zo traag dat ik dat liever niet wil gebruiken.
Het stukje dat het traag maakt is dit:
SQL:
1
2
3
4
5
6
| SELECT topic_id FROM tbltopics t WHERE last_entry = (SELECT max(last_entry) FROM tbltopics t2 WHERE t2.forum_id = f.forum_id) |
Nu dacht ik dat dit heel gemakkelijk met een HAVING op te lossen was, en dat heb ik ook geprobeert, maar daar kwam ik niet helemaal aan uit.
Ik had iets als dit:
SQL:
1
2
3
4
| SELECT t.topic_id FROM tbltopics t WHERE t.forum_id = f.forum_id GROUP BY t.topic_id, last_entry HAVING last_entry = max(last_entry) |
Maar dat geeft deze foutmelding:
Microsoft JET Database Engine error '80004005'
At most one record can be returned by this subquery.
Ik ben er nu al meer dan een uur mee aan het spelen maar ik kom er echt niet uit...
EDIT/
Ik was weer eens veel te moeilijk aan het denken...
SQL:
1
| SELECT top 1 topic_id FROM tbltopics t WHERE t.forum_id = f.forum_id ORDER BY last_entry DESC |
Dat doet het gewoon!
[ Voor 6% gewijzigd door Mischa_NL op 26-07-2005 19:14 ]