[MYSQL] MAX() zonder group by?

Pagina: 1
Acties:

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 15-09 08:37
oi, ik wil uit een table topics & replies waarden halen. nu haal ik topic zut uit topics tabel en de MAX waarde van postdatum (datetime column). nu wil mysql perse dat ik rows ga groupen :? .

ik wil helemaal niks groeperen! want dan kan ik niet meer ok sorteren op datum om dat tie eerst de output heeft gegroept.

dit schijnt echter alleen voor te komen als ik iets uit meerdere tabellen haal. bij deze query bijv. hoef ik geen group by function te gebruiken:

SELECT MAX(postdatum) FROM replies;

bij deze echter wel :?
ik wil n.l. de group by helemaal weg hebben omdat m'n output dan niet is zoals ik het hebben wil :(
het enige wat ik wel is sorteren op datum.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT gebruikers.gebruikersnaam,
        topics.topic,
        topics.replies,
        MAX(DATE_FORMAT(postdatum, '%d-%m-%y %T'))
        AS postdatum 

   FROM   gebruikers,topics,replies 

   WHERE  topics.forum_id = "+Request.Querystring("fid")+"
    AND   replies.topic_id = topics.id 
    AND   topics.topicstarter = gebruikers.id

   GROUP BY replies.topic_id 
   ORDER BY replies.postdatum DESC;

wat doet group by precies eigenlijk? search & mysql docs lieten mij een beetje in de steek....

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 15-09 08:37
geen diehard coders die nog wakker zijn >:)

ik gaat ook maar is :z .

Verwijderd

Waarom gebruik je MAX als je alleen wil sorteren? Ik snap je probleem niet ...

GROUP BY neemt alle records met gelijke waardes in de opgegeven kolom(en) samen tot 1 'virtueel' record. Over de kolommen waarop niet gegroepeerd wordt zijn dan 'GROUP BY functions' te gebruiken (voor zover dat kan voor het data type van de kolom. Voorbeelden van dergelijke functies zijn MAX(), AVG(), MIN(), COUNT(), etc ...

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Dit kan inderdaad niet zonder reply wat MySQL doet bij
code:
1
SELECT MAX(postdatum) FROM replies;

is eigenlijk
code:
1
SELECT MAX(postdatum) FROM replies GROUP BY *;

Nu weet ik niet of dat een geldige syntax is >:), maar je krijgt het idee, het groepeert impliciet.

Wat wil je nou bereiken? Als je sorteert op datum, dan is diegene met grootste datum toch automatisch 1e ?!

Ohja en dit:
MAX(DATE_FORMAT(postdatum, '%d-%m-%y %T'))
is wel ERG cpu-intensief...

[edit]
Een love smiley in een query is ook niet alles ;)
En het blijkt dat MrX en ik tegelijk die-hard coder willen zijn :P

Verwijderd

offtopic:
/me lol[quote]
Op vrijdag 28 december 2001 03:09 schreef Orphix onder andere het volgende:
SELECT MAX(postdatum) FROM replies GROUP BY *;
[/quote]

Ik heb zelden zo'n romantische query gezien ... :+

edit:
Sorry, moest even.

Sleep deprevation side effects, gotta love 'em ;) .... sleep commencing in 5 ... 4 ... 3 ... 2 ... 1 ... :Z

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 15-09 08:37
ik zal het ff wat simpeler doen, het was vannacht al zo laat. :z

de versimpelde query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    SELECT topics.topic,
         MAX(replies.postdatum) AS postdatum

    FROM topics,replies 
    
    WHERE topics.forum_id = "+Request.Querystring("fid")+" 
    
    GROUP BY topics.topic 
    
    ORDER BY replies.postdatum DESC

- - - - - 
de volgende (versimpelde) tabellen

table topics: 
id - topic - topicstarter - - forum_id


table replies: 
id - postdatum - gebruiker_id - topic_id

en dan heb je natuurlijk een heleboel replies bij een topic.

wat ik dus haal uit replies is de MAX postdatum (de datum van laatste post) van een topic. dat is wat ik wil doen en voorderest geen gegroepte zooi.

is hier een oplossing voor?


//edit
iemand trouwens nog een goeie site met mysql functions e.d. reference? mysql docs zijn nogal wazig..

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 13-09 23:09

Skinny

DIRECT!

Op vrijdag 28 december 2001 11:55 schreef twiekert een query:
[onzin]

SIZE does matter.
"You're go at throttle up!"


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

SELECT MAX(postdatum) FROM replies
Dat hij er een group by wilt hebben ligt niet aan het aantal tabellen, maar aan het aantal geselecteerde velden.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 13-09 23:09

Skinny

DIRECT!

Dit werkt hier bij mij :
code:
1
2
3
SELECT headline, news_comments.timestamp AS timestamp 
FROM news LEFT JOIN news_comments ON news_comments.news_id = news.id
ORDER BY news_comments.timestamp DESC

omgebouwd naar jouw tabellen:
code:
1
2
3
4
SELECT topics.topic, replies.postdatum
FROM topics LEFT JOIN replies ON replies.topic_id = topics.id
WHERE topics.forum_id = Request.QueryString("fid")
ORDER BY replies.postdatum DESC

Op deze manier krijg je namelijk ook gewoon een leeg veldje als postdatum als er nog geen replies zijn.

SIZE does matter.
"You're go at throttle up!"


  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 15-09 08:37
ik ben er al gedeeltelijk uit! ik heb iedergeval nu een goede output. wat ik nu gedaan heb is de velden die ik ophaal ook allemaal groepeer.

ik ga nog ff kijken naar de meest optimale en snelste query met geformateerde postdatum.


niet dat snel en goed heel erg boeit, komen toch geen duizenden bezoekers op mijn forum, tis tenslotte ook maar een schoolprojectje.. :X
Pagina: 1