[MySQL] Join probleem

Pagina: 1
Acties:
  • 61 views sinds 30-01-2008

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Ik ben nu bezig met een klein forumpje (Wie niet?) en ben nu bezig met sql joins.

Ik heb de volgende join:
PHP:
1
<?$query = mysql_query("SELECT * FROM onderwerpen LEFT JOIN reakties ON reakties.r_bericht_id=onderwerpen.o_id LEFT JOIN gebruikers ON gebruikers.g_id=onderwerpen.o_user_id GROUP BY onderwerpen.b_id ORDER BY reakties.r_datum DESC");?>

Nu is het zo dat hij nu alles netjes sorteerd op waar het laatste in is gereageerd, maar als ik een topic plaats en er zijn nog geen reakties dan staat die helemaal onder aan.
Terwijl die helemaal boven aan moet staan.

Wie o wie kan mij helpen?

  • Glock
  • Registratie: November 2001
  • Niet online
is het niet makkelijker om in je topics tabel iedere keer de laatste post up te daten en daar op te sorteren... :? ;)

Edit: dus ik bedoel dan, als er geen reactie is is de laatste post tijd dat topic gepost is en anders de laatste post die dus steeds word upgedate :)

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Bedoel je dat ik in de tabel onderwerpen een extra veld met de datum/tijd in gooi? en als er wordt reagereerd hij die datum ook aanpast?

  • Glock
  • Registratie: November 2001
  • Niet online
Op donderdag 20 juni 2002 11:09 schreef SyphOn het volgende:
Bedoel je dat ik in de tabel onderwerpen een extra veld met de datum/tijd in gooi? en als er wordt reagereerd hij die datum ook aanpast?
idd ;)

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Maar het zou toch ook met die join moeten kunnen? zo ja dan zou ik graag willen weten hoe?

  • leonardo1504
  • Registratie: April 2001
  • Niet online
Dat komt omdat er geen reaktie is bij dat onderwerp, en dus ook geen datumveld (waarop gesorteerd wordt). Omdat je waarschijnlijk toch ook de onderwerpen zonder reacties wil sorteren (nieuwste bovenaan) zou ik het opsplitsen in twee queries: eerst de onderwerpen zonder reacties, gesorteerd op datum DESC, en daarna de onderwerpen met reacties gesorteerd op datum DESC.

[edit]
Je zou het inderdaad ook met een extra datumveld kunnen doen, in de tabel met onderwerpen (datum laatste reactie) dan kan je daar op sorteren en het in 1 query doen

  • Glock
  • Registratie: November 2001
  • Niet online
ik neem aan dat je ze als timestamp opslaat?
als je nog geen reacties heb is deze dus 0 of NULL, dit is kleiner als 1234567980 bv. dus komt onderaan te staan.
Zou je bij het maken van het topic als laatste reactie de plaatsing van het topic moeten invullen.

of... op verscheidene dingen sorten dat eerst 0/NULL gegroepeerd word en daarna pas de laatste reactie.
Edit:
Op donderdag 20 juni 2002 11:12 schreef leonardo1504 het volgende:
zelf vink 2 query's beetje zonde, volgens mij kan je dan beter dubbel groupen :?

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
:? Dat met die 2 query's is dan wel een heel gedoe :(
MAar het zou dus never met een join kunnen?

  • Glock
  • Registratie: November 2001
  • Niet online
Op donderdag 20 juni 2002 11:15 schreef SyphOn het volgende:
:? Dat met die 2 query's is dan wel een heel gedoe :(
MAar het zou dus never met een join kunnen?
jawel, dubbel groepen :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

* Janoz snapt niet waarom mensen altijd een verschil zien tussen een startpost en een reactie..

Wat is nu werkelijk het verschil tussen een startpost en een reactie? Op beide stukken tekst kun je toch dezelfde bewerkingen uitvoeren?

Een startpost is natuurlijk eigenlijk iets meer dan een reaktie (er zit bv een titel bij) maar die extra dingen kun je simpel los op slaan.

Door de nu gebruikte structuur krijg je trouwens nog meer problemen. Zoeken, berichten tellen uit 2 tabellen ipv 1. 2 verschillende implementaties voor het editen en adminfuncties van een verhaaltje.

Zie de startpost nu maar gewoon als een eerste reactie, dat werkt een stuk makkelijker.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Glock
  • Registratie: November 2001
  • Niet online
Op donderdag 20 juni 2002 11:18 schreef Janoz het volgende:
you speack my language :)

  • leonardo1504
  • Registratie: April 2001
  • Niet online
http://www.mysql.org/doc/C/o/Control_flow_functions.html

Als het datumveld NULL is zonder eacties zou bovenstaande IFNULL functie je moeten kunnen helpen. Daarmee kan je een willekeurige waarde selecteren in plaats van de NULL-value

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Dus ik kan beter 1 tabel maken met berichten als Janoz goed begrijp.

BTW: Zoals Glock zei werkt ook!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Zelfde structuur als je nu hebt (tabel onderwerpen en een tabel reacties), maar de startpost sla je niet op in de tabel onderwerpen, maar als eerste reactie in de tabel reacties. Zelfde resultaat, makelijker database model en simpelere code..

(denk bijvoorbeeld ook aan het afdrukken van een thread.. In mijn versie hoef je alleen alle reacties onder elkaar te zetten ipv eerst nog eens de startpost appart te behandelen)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Dus je zet in de tabel met onderwerpen alleen de titel en een id ? en de rest in de tabel reakties?

Verwijderd

Ja, wat jij gebruikt is de oude vBulletin 1 aanpak.

Verwijderd

Op donderdag 20 juni 2002 12:37 schreef SyphOn het volgende:
Dus je zet in de tabel met onderwerpen alleen de titel en een id ? en de rest in de tabel reakties?
Precies ;)

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Thx guys ik heb weer wat geleerd :) voortaan ga ik eerst maar over mijn databse structuur denken :7

Verwijderd

Ik heb gezien dat je SQL vragen kan stellen aan Microsoft experts op het forum van XCESS expertise center b.v. (www.xcess.nl). Ze hebben daar ook best handige tips voor software ontwikkeling in de Microsoft omgeving.
Succes!
Roppie

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Thx maar het is wel MS SQL en dat kan meer dan MySQL.

  • Glock
  • Registratie: November 2001
  • Niet online
Op donderdag 20 juni 2002 11:27 schreef SyphOn het volgende:
BTW: Zoals Glock zei werkt ook!
heb 't btw zelf wel over meerdere tabellen staan :P

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Glock heb je msn? zo ja mail me ff je msn adres.

Ik heb nu gekozen om het op glock zijn manier te doen. (Ik ben lui)

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

dusty

Celebrate Life!

Achja de "Zolang het maar werkt" mentaliteit duikt weer op.

Dat op zich zegt al heel veel over wat voor programmeur je werkelijk bent.

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


  • Glock
  • Registratie: November 2001
  • Niet online
Op donderdag 20 juni 2002 14:24 schreef SyphOn het volgende:
Glock heb je msn? zo ja mail me ff je msn adres.

Ik heb nu gekozen om het op glock zijn manier te doen. (Ik ben lui)
eh... welke mijn manier :? :P
maarreh, gewoon jqcschuyt@hotmail.com zoals in me profile staat :P (zie geen mail in jou profile)

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 13:01
Iemand met een goed database model voor een forum? Ik zit zelf met allemaal verschillende iedeeen maar kan niet echt een goede oplossing vinden.

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

dusty

Celebrate Life!

Pak een bestaande forum software, aangezien dat het lijkt dat je toch altijd voor de makkelijkste oplossing kiest.

Ik sluit deze topic aangezien dit meer op een "script"-request begint te lijken.

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

Pagina: 1

Dit topic is gesloten.