Avatar billede dennism Nybegynder
12. april 2003 - 16:50 Der er 14 kommentarer og
1 løsning

mySQL

Jeg har denne mySQL foresp.:
$mysql2 = mysql_query("SELECT traad_id FROM forum_indlaeg WHERE forum_id = '$row[id]' ORDER BY dato DESC LIMIT 0,3");

Det jeg vil, er at den skal finde de tre nyeste rækker i tabellen "forum_indlaeg" (udfra dato).
En af kolonnerne i tabellen hedder traad_id, og indeholder ID'et på den tråd som forum-indlæget er skrevet til.

Hvis vi så forestiller os, at to af de tre nyeste indlæg er skrevet til den samme forum-tråd, så bliver det samme forum-indlæg printet to gange.. Det er så dette jeg vil forhændre!..

Hvordan kan jeg lave sådan, at den springer rækken over, hvis der er før er blevet printet en række med det "forum_traad" ID?

Jeg håber I forstår hvad mit problem er, ellers så må I lige sige til!
Avatar billede twm Nybegynder
12. april 2003 - 16:58 #1
$mysql2 = mysql_query("SELECT traad_id FROM forum_indlaeg WHERE forum_id = '$row[id]' GROUP BY traad_id ORDER BY dato DESC LIMIT 0,3");
Avatar billede dennism Nybegynder
12. april 2003 - 16:59 #2
HVad gør "group"?
Avatar billede twm Nybegynder
12. april 2003 - 17:02 #3
hvis du har et recordset der ser således ud, sorteret efter dato:
3
3
2
3
5
2
3
7

Leverer den dette tilbage:
3
2
5
Avatar billede schaefner Juniormester
12. april 2003 - 17:03 #4
Nok nærmere:
7
5
3

;o)
Avatar billede twm Nybegynder
12. april 2003 - 17:05 #5
Jeg tænkte nu mere at det var et udsnit fra et recordset med hans sql, der har han order by dato desc ;)
Avatar billede dennism Nybegynder
12. april 2003 - 17:06 #6
Hmm.. Det virker vist ik som det skal..
Sådan ser mit recordset ud hvis det bare er sorteret efter dato DESC:

9
1
1
1
1
4
9
9
9
1

Når jeg så kører den med "GROUP BY traad_id", så komme de tre første i denne rækkefølge:
4
9
3

Og det passer jo slet ikke..

Der skulle jo gerne stå:
9
1
4
Avatar billede dennism Nybegynder
12. april 2003 - 17:08 #7
Det er altså traad_id der har den værdi jeg har skrevet!
Avatar billede twm Nybegynder
12. april 2003 - 17:08 #8
$mysql2 = mysql_query("SELECT traad_id,max(primaryid) as sortid FROM forum_indlaeg WHERE forum_id = '$row[id]' GROUP BY traad_id ORDER BY sortid DESC LIMIT 0,3");
Avatar billede twm Nybegynder
12. april 2003 - 17:09 #9
skift primaryid ud med din primary key, hvis den vel og mærke er en autonummererende
Avatar billede dennism Nybegynder
12. april 2003 - 17:10 #10
Hvad skal jeg udskifte "sortid" med?
Avatar billede twm Nybegynder
12. april 2003 - 17:10 #11
sortid er som den skal være du skal skifte primaryid ud med din primærnøgle
Avatar billede dennism Nybegynder
12. april 2003 - 17:11 #12
Den primary key ligger i ID.. Er det så bare skrive "id" i stedet for "primaryid"?
Avatar billede twm Nybegynder
12. april 2003 - 17:11 #13
jep
Avatar billede dennism Nybegynder
12. april 2003 - 17:12 #14
Genialt makker... ;)

Det virker sku... Men vil du så ik lige være venlig at forklare mig hvorfor det virker? :)
Jeg vil nemlig også gerne lære noget..
Avatar billede twm Nybegynder
12. april 2003 - 17:18 #15
Godt det der sker er at databasen løber kronologisk igennem tabellen via enten index eller direkte i tabellen, og group by bliver kørt før order by(dvs denne sortering sker helt til sidst). Selv om vi samler flere rækker kan vi stadig kun have en værdi i hvert felt, og da den løb kronologisk igennem gemmer den den mindste værdi. Vi har dog brug for de største værdier da vi vil have den dato DESC, derfor bruger vi MAX for at få den højeste værdi!

Hmmm...
Håber det var svar nok! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester