Hellup! We snappen het niet meer!!!
Maar voordat ik mijzelf van het balkon werp zal ik het probleem beschrijven.
We hebben de volgende tables:
Nu willen wij in een query voor de searchengine (op topicstarter) als resultaat topics.* krijgen waar (als voorbeeld):
topics.forumid = 5
posts.authorid = 1
posts.topicid = topics.id
maar we moeten maar 1 posts.authorid hebben, namelijk de eerste van het topic (dus degene met de laagste posts.timestamp), alleen we komen er niet uit... we krijgen nu elke post in het topic waarvan de authorid 1 is, omdat al deze posts als topicid 8 hebben en topic.forumid 5 is...
eigenlijk zouden we dus gewoon de lijst met posts moeten orderen op timestamp en dan limitten tot 1... maarjah...
we hebben nu iets als
en dat zou in psuedo code zoiets worden als
Maar... helaasch ontdekten wij na lang zoeken dat er geen mysql functie "laagste van dit topic" bestaat
En plz kom niet aan met nuttige tips als "RTFM" en "UTFS" want dat zitten we al uren te doen.
Tnx alvast
Maar voordat ik mijzelf van het balkon werp zal ik het probleem beschrijven.
We hebben de volgende tables:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| mysql> explain topics; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | postid | int(10) unsigned | YES | | NULL | | | subject | char(64) | YES | | NULL | | | flags | int(11) | YES | | NULL | | | forumid | int(10) unsigned | YES | | NULL | | | lastpostid | int(10) unsigned | YES | | NULL | | +------------+------------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) mysql> explain posts; +--------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | authorid | int(10) unsigned | YES | | NULL | | | timestamp | datetime | YES | | NULL | | | edited | int(11) | YES | | NULL | | | editedtime | datetime | YES | | NULL | | | editeduserid | int(10) unsigned | YES | | NULL | | | ip | char(16) | YES | | NULL | | | messageid | int(10) unsigned | YES | | NULL | | | topicid | int(10) unsigned | YES | | NULL | | +--------------+------------------+------+-----+---------+----------------+ |
Nu willen wij in een query voor de searchengine (op topicstarter) als resultaat topics.* krijgen waar (als voorbeeld):
topics.forumid = 5
posts.authorid = 1
posts.topicid = topics.id
maar we moeten maar 1 posts.authorid hebben, namelijk de eerste van het topic (dus degene met de laagste posts.timestamp), alleen we komen er niet uit... we krijgen nu elke post in het topic waarvan de authorid 1 is, omdat al deze posts als topicid 8 hebben en topic.forumid 5 is...
eigenlijk zouden we dus gewoon de lijst met posts moeten orderen op timestamp en dan limitten tot 1... maarjah...
we hebben nu iets als
code:
1
| SELECT topics.* from topics, posts where topics.forumid = 5 AND posts.authorid = 1 AND posts.topicid = topics.id; |
en dat zou in psuedo code zoiets worden als
code:
1
| SELECT topics.* from topics, posts where topics.forumid = 5 AND posts.authorid = 1 AND posts.topicid = topics.id AND posts.timestamp = laagste van dit topic; |
Maar... helaasch ontdekten wij na lang zoeken dat er geen mysql functie "laagste van dit topic" bestaat
En plz kom niet aan met nuttige tips als "RTFM" en "UTFS" want dat zitten we al uren te doen.
Tnx alvast