[mysql] Hoe kan ik dit doen

Pagina: 1
Acties:

  • TiG
  • Registratie: Maart 2001
  • Laatst online: 29-06 14:19
Ok, ik ben een beetje mySQL newbee maar ik kan wel simpele selects uitvoeren e.d. Maar wat ik nu graag zou willen lukt me niet. Ik heb de volgende 2 tabellen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
post:
id | topicid | poster | tijd
---+---------+--------+-----
 1 |   1     |  Jan   |  1
 2 |   1     | Klaas  |  2
 3 |   2     |  Jan   |  3
 4 |   1     | Piet   |  4

topic:
id | subject
---+-------------
 1 | 1e onderwerp
 2 | 2e onderwerp

Nu wil ik met 1 query het topic id, topic onderwerp, laatste poster en laatste tijd weten. Ik zat dus te denken aan iets in de richting van:
code:
1
2
3
SELECT topic.id, topic.subject, post.poster, MAX(post.tijd)
FROM topic, post
GROUP BY post.topicid

Het probleem is nu dat ik niet de laatste poster te zien krijg maar de 1e, hoe kan ik dit verhelpen :?

U gaat door voor de retorische vraag...


  • spok9
  • Registratie: November 2000
  • Laatst online: 14-09 12:30

spok9

Groen...

Wat er mis gaat zie ik zo 123 niet ff, maar ik denk dat je de functie MAX() iig beter niet kunt gebruiken, volgens mij gaat dat niet werken met tijden dit omdat bijvoorbeeld 12:34 geen getal is maar een string...

(correct me if i'm wrong :) )

edit: misschien een oplossing (maar nog steeds met max()...):
code:
1
2
3
4
SELECT topic.id, topic.subject, post.poster
WHERE post.tijd = MAX(post.tijd)
FROM topic, post
GROUP BY post.topicid

Zolang ik het zelf geloof is het goed toch?


  • TiG
  • Registratie: Maart 2001
  • Laatst online: 29-06 14:19
De tijden sla ik op als een Unix timestamp (in de database dus gewoon een integer).

Wat er misgaat is dat ik niet de naam krijg van de laatste poster maar van de 1e. In dit geval dus Jan waar ik eigenlijk Piet zou willen zien.

U gaat door voor de retorische vraag...


  • TiG
  • Registratie: Maart 2001
  • Laatst online: 29-06 14:19
Op vrijdag 18 januari 2002 00:28 schreef spok9 het volgende:
code:
1
2
3
4
SELECT topic.id, topic.subject, post.poster
WHERE post.tijd = MAX(post.tijd)
FROM topic, post
GROUP BY post.topicid
You have an error in your SQL syntax near 'WHERE post.tijd = MAX(post.tijd) FROM topic, post GROUP BY' at line 2

U gaat door voor de retorische vraag...


  • EyE
  • Registratie: Mei 2000
  • Laatst online: 28-08 20:25

EyE

SELECT topic.id, topic.subject, post.poster, post.tijd FROM topic, post WHERE topic.id=post.topicid ORDER BY post.tijd DESC LIMIT 1

  • TiG
  • Registratie: Maart 2001
  • Laatst online: 29-06 14:19
EyE: tnx, dit werkt al beter. Het enige probleem is dat ik eigenlijk van het volgende topic precies dezelfde info moet hebben. Als ik b.v. de gegevens van 40 topics wil hebben zou ik een loop moeten maken en dan kom ik nog uit op 40 queries. Beetje hoog :) Kan het niet anders?

U gaat door voor de retorische vraag...


  • EyE
  • Registratie: Mei 2000
  • Laatst online: 28-08 20:25

EyE

erg lelijk, en misschien wel net zo langzaam, maar zoiets zou kunnen werken:
code:
1
2
3
4
5
6
SELECT topic.id, topic.subject, post.poster, post.tijd
FROM topic, post
WHERE topic.id=post.topicid
AND CONCAT_WS('|', post.topicid, post.tijd)
    IN (SELECT CONCAT_WS('|', post.topicid, MAX(post.tijd)) 
      FROM post GROUP BY post.topicid)
Pagina: 1