Toon posts:

Forum in php+mysql met ingesprongen replies

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mijn probleem is het volgende:
Een bericht heeft een (in mysql) <m_id> en <reply_to>. Het kan dus een bericht zijn op zich of een reply op een andere bericht.

Wat ik nou wil is dat ik alle berichten zodanig sorteer zoodat de replies onder het bericht komen, waar ze op replyen (zodat ik ze kan laten inspringen).

Dus:
<m_id>|<reply_to>
1|0
2|0
3|0
4|1
5|2
6|1
7|4
moet gesorteerd worden als:
<m_id>|<reply_to>
1|0
4|1
7|4
6|1
2|0
5|2
3|0

Dis is dus net zoals de berichten in de tweakers.net die zo mooi zijn ingesprongen.

alvast dank
Öz

[ Voor 6% gewijzigd door Verwijderd op 21-04-2003 16:24 ]


  • BobDay
  • Registratie: December 2001
  • Laatst online: 11-08-2025
Ik denk dat het makkelijkste is je tabel uit te breiden met kolom inspring_niveau
en dan bij het plaatsen van een nieuw bericht een extra query gebruiken om op te vragen wat het huidige niveau is van <reply_to>

//edit: hmmm, een goede sorteer functie heb je dan nog niet

[ Voor 15% gewijzigd door BobDay op 21-04-2003 16:59 ]

43% of all statistics are worthless


Verwijderd

Waar ga je dat zetten? op je index page? want zoveel nut heeft het eigenlijk niet denk ik..

Verwijderd

Topicstarter
Ik heb mijn tabel uitgebreid met een nieuwe kolom <g_id> :Group Id. Elke reply krijgt dezelfde groep aangewezen als het oorspronkelijke bericht. Als je dan :
SELECT * FROM messages ORDER BY g_id,reply_to,m_id LIMIT 0,50;
doet krijg je wel mooi de replies mooi bij het bericht, maar een reply op een reply is dan nog steeds niet opgevangen:

Nog een voorbeeld:
<m_id><reply_to><g_id>
1 | 0 | 0
2 | 0 | 1
3 | 1 | 0
4 | 1 | 0
5 | 4 | 0
6 | 0 | 2
7 | 3 | 0

wordt dan gesorteerd als volgt :
<m_id><reply_to><g_id>
1 | 0 | 0
3 | 1 | 0
4 | 1 | 0
7 | 3 | 0
5 | 4 | 0
2 | 0 | 1
6 | 0 | 2

maar het had moeten zijn:
<m_id><reply_to><g_id>
1 | 0 | 0
3 | 1 | 0
7 | 3 | 0
4 | 1 | 0
5 | 4 | 0
2 | 0 | 1
6 | 0 | 2

duidelijk genoeg?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Je wilt dus gewoon een boomstructuur bouwen? Kan je doen met een recursieve functie..

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 21 April 2003 @ 18:22:
Je wilt dus gewoon een boomstructuur bouwen? Kan je doen met een recursieve functie..
Ik weet dat ik een recursieve functie hiervoor kan gebruiken, maar ik wil een SQL query het werk voor mij laten doen.

Dit lijkt mij een veel betere oplossing, dan eerst alle records in een tabel opvragen en dan zelf sorteren, informatie opvragen en dan html genereren. Dit is namelijk erg intensief werk en je vraagt ook teveel informatie op.

  • MichelVH
  • Registratie: Oktober 2001
  • Laatst online: 01-08 09:33
Boomstructuren worden niet echt ondersteund door MySQL voor zover ik weet. Je moet dan die tabel op zichzelf gaan joinen en de vraag is of je dat echt wilt, want het komt de overzichtelijkheid niet ten goede.

Don't be afraid of the dark, be afraid of what it hides


Verwijderd

Topicstarter
Hmmm... Daar was ik al bang voor... Hoe doen ze het bij tweakers bijvoorbeeld? Ze gebruiken zeker een andere DBMS?

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 21-08 06:33

Tux

Özzy schreef op 21 April 2003 @ 18:44:
Hmmm... Daar was ik al bang voor... Hoe doen ze het bij tweakers bijvoorbeeld? Ze gebruiken zeker een andere DBMS?
Tweakers.net gebruikt naar mijn weten gewoon MySQL :)

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


  • MichelVH
  • Registratie: Oktober 2001
  • Laatst online: 01-08 09:33
Waarschijnlijk met joins. Het kán ook best met joins, maar dan zit je wel vast aan een maximaal niveau (en de controle daarop moet je deels in je code doen). Ik heb voor mijn eigen site een soortgelijk reactiesysteem, en daarbij krijg ik de onderstaande resultset terug (versimpeld, normaal tot r4):
code:
1
2
3
4
5
6
-----------------------------------------------------------------
r1_reactie_id | r1_reactie_text | r2_reactie_id | r2_reactie_text
-----------------------------------------------------------------
 1            | tekst           | 2             | tekst
 1            | tekst           | 3             | tekst
 4            | nieuwe tekst    | NULL          | NULL
In de PHP code loop je r1 t/m r4 af en per rij kijk je steeds of het id verschillend is van het vorige id op dat niveau. Als het anders is output je die reactie, zo niet ga je verder met de volgende r

Het kan vast simpeler, maar zo doe ik het atm. en het werkt naar behoren :)

[ Voor 2% gewijzigd door MichelVH op 21-04-2003 18:54 . Reden: NULL toegevoegd ]

Don't be afraid of the dark, be afraid of what it hides

Pagina: 1