/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
SVÆR Sql
Fra : Michael Hansen


Dato : 20-12-02 14:02

Hej NG !

Jeg udvikler på et forum der lavet i php. Alle indlæg i forummet gemmes i en
mySql tabel. Trådene i forummet er kædet sammen ved hjælp af rootID og
parentID. Altså hvert indlæg har et unikt rootID. Når dette indlæg besvares
så tildeles svarindlægets parentid værdien af id fra det indlæg der svares
på.

Det jeg har brug for at lave er en liste med alle startindlæg, som er
sorteret således at det indlæg der sidst er besvaret skal stå øverst på
listen.

Mit spørgsmål er nu hvordan min SQL skal se ud. Jeg ved så meget at jeg skal
trække de rækker ud hvor parentID=0 da det er alle med startindlæg. Men
hvordan får jeg det sorteret i den rigtige rækkefølge ???

--
Mvh
Michael Hansen



 
 
Allan E (20-12-2002)
Kommentar
Fra : Allan E


Dato : 20-12-02 15:51

"Michael Hansen" <michael@amweb.dk> wrote in message
news:3e0315a5$0$1767$d40e179e@nntp03.dk.telia.net...
> Mit spørgsmål er nu hvordan min SQL skal se ud. Jeg ved så meget at jeg
skal
> trække de rækker ud hvor parentID=0 da det er alle med startindlæg. Men
> hvordan får jeg det sorteret i den rigtige rækkefølge ???

Du kan prøve at tilføje noget ligende:

.... ORDER BY rootID DESC;

i slutningen af din sql sætning. Eller hvis du har et timestamp på hvert
indlæg kan du bruge det i stedet.

Mvh Allan E



Michael Hansen (20-12-2002)
Kommentar
Fra : Michael Hansen


Dato : 20-12-02 16:15

<SNIP>
>
> ... ORDER BY rootID DESC;
>
Ja det er klart, så sorterer den det efter rootID. Men det var jo ikke det
jeg ville have den til.
Prøv at læs mit indlæg engang til.

--
Mvh
Michael Hansen



Allan E (21-12-2002)
Kommentar
Fra : Allan E


Dato : 21-12-02 01:34

"Michael Hansen" <michael@amweb.dk> wrote in message
news:3e033473$0$24690$d40e179e@nntp02.dk.telia.net...

> Prøv at læs mit indlæg engang til.

Sorry, de 3 ord "Sidst er besvaret" missede lige min opmærksomhed :-/
Men du er så nok nødt til at skulle ud i noget join, som også Jakob skriver
lidt længere nede i news:atveas$bki$1@sunsite.dk

Mvh Allan E



Jakob Kirkegaard (20-12-2002)
Kommentar
Fra : Jakob Kirkegaard


Dato : 20-12-02 16:51

Michael Hansen wrote:
> Jeg udvikler på et forum der lavet i php. Alle indlæg i forummet gemmes i
> en mySql tabel. Trådene i forummet er kædet sammen ved hjælp af rootID og
> parentID. Altså hvert indlæg har et unikt rootID. Når dette indlæg
> besvares så tildeles svarindlægets parentid værdien af id fra det indlæg
> der svares på.
>
> Det jeg har brug for at lave er en liste med alle startindlæg, som er
> sorteret således at det indlæg der sidst er besvaret skal stå øverst på
> listen.
>
> Mit spørgsmål er nu hvordan min SQL skal se ud. Jeg ved så meget at jeg
> skal trække de rækker ud hvor parentID=0 da det er alle med startindlæg.
> Men hvordan får jeg det sorteret i den rigtige rækkefølge ???

En af sikkert mange muligheder er at lave et self-join.

SELECT DISTINCT f1.rootID FROM forum AS f1 LEFT JOIN forum AS f2 ON
f1.rootID = f2.parentID WHERE f1.parentID=0 ORDER BY f2.date

En anden og sikkert mere effektiv metode er at hive det hele ind i php og
ordne det vha. array sortering.

For en anden gangs skyld hører sådanne spørgsmål hjemme i d.e.database.

--
mvh Jakob Kirkegaard
-> http://jakir.dk

Jacob Atzen (20-12-2002)
Kommentar
Fra : Jacob Atzen


Dato : 20-12-02 19:56

Jakob Kirkegaard <jkir00@control.auc.dk> writes:

> > Mit spørgsmål er nu hvordan min SQL skal se ud. Jeg ved så meget at jeg
> > skal trække de rækker ud hvor parentID=0 da det er alle med startindlæg.
> > Men hvordan får jeg det sorteret i den rigtige rækkefølge ???
>
> En af sikkert mange muligheder er at lave et self-join.
>
> SELECT DISTINCT f1.rootID FROM forum AS f1 LEFT JOIN forum AS f2 ON
> f1.rootID = f2.parentID WHERE f1.parentID=0 ORDER BY f2.date

Ville det ikke være nemmere med:

SELECT rootID FROM forum WHERE parentID = 0 ORDER BY date

Eller hvad giver din løsning af yderligere information?

> En anden og sikkert mere effektiv metode er at hive det hele ind i php og
> ordne det vha. array sortering.

Jeg vil gætte på at databasen kan sortere posterne efter dato
hurtigere end PHP.

--
Med venlig hilsen
- Jacob Atzen

Jakob Kirkegaard (20-12-2002)
Kommentar
Fra : Jakob Kirkegaard


Dato : 20-12-02 20:32

Jacob Atzen wrote:
> Jakob Kirkegaard <jkir00@control.auc.dk> writes:
>> En af sikkert mange muligheder er at lave et self-join.
>>
>> SELECT DISTINCT f1.rootID FROM forum AS f1 LEFT JOIN forum AS f2 ON
>> f1.rootID = f2.parentID WHERE f1.parentID=0 ORDER BY f2.date
>
> Ville det ikke være nemmere med:
>
> SELECT rootID FROM forum WHERE parentID = 0 ORDER BY date
>
> Eller hvad giver din løsning af yderligere information?

Jo, hvis man blot ville have toplevel indlæg listet efter dato. Men så vidt
jeg forstod på spørgeren, så var målet at sortere toplevel indlæg efter
followup beskedernes timestamp og ikke tidspunktet for selve toplevel
indlægget.

>> En anden og sikkert mere effektiv metode er at hive det hele ind i php og
>> ordne det vha. array sortering.
>
> Jeg vil gætte på at databasen kan sortere posterne efter dato
> hurtigere end PHP.

Det kommer vel an på hvor omfattende joins man skal ud i for at opnå dette.

--
mvh Jakob Kirkegaard
-> http://jakir.dk

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste