[PHP/MySQL] Twee tabellen "joinen" en hoogste waarde bepalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
Ik ben zelf een forumpje in PHP/MySQL aan het bouwen. Ik heb de replies en topics in de database in twee verschillende tabellen staan, omdat ik dit duidelijker en overzichtelijker vind.

Ik wil nu alleen de "Laatste Post" van een forum kunnen bepalen. Hiervoor wou ik deze twee tabellen laten joinen en dan kijken welke timestamp het grootst is. Ik heb niet zoveel ervaring met MySQL Queries en het zal vast wel eens langs zijn gekomen. Toch zou ik graag wat hulp gebruiken :)

Hier de database structuur van de twee tabellen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE TABLE `forum_reply` (
  `id` int(10) NOT NULL auto_increment,
  `tekst` longtext NOT NULL,
  `userid` int(10) NOT NULL default '0',
  `threadid` int(10) NOT NULL default '0',
  `ip` varchar(255) NOT NULL default '',
  `timestamp` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;


CREATE TABLE `forum_thread` (
  `id` int(10) NOT NULL auto_increment,
  `titel` varchar(255) NOT NULL default '',
  `tekst` longtext NOT NULL,
  `isClosed` int(1) NOT NULL default '0',
  `userid` int(10) NOT NULL default '0',
  `categorieid` int(10) NOT NULL default '0',
  `ip` varchar(255) NOT NULL default '',
  `timestamp` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

Computer Specs


Acties:
  • 0 Henk 'm!

Verwijderd

Wat staat er precies in de timestamp van forum_threads? De timestamp van forum_reply is neem ik aan de tijd van plaatsing?

Ik snap nl. niet wat je in de timestamp van de thread wil plaatsen... De tijd dat de thread gemaakt is wellicht?

Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
timestamp staat gewoon time(); waarop een reply of een topic is aangemaakt. Ik wil gewoon in de forum main waar je aantal categorieen hebt meteen op de Laatste post (de grootste timestamp) kunnen klikken en bij die post terecht komen.

Computer Specs


Acties:
  • 0 Henk 'm!

Verwijderd

GandalfTheGrey schreef op woensdag 08 maart 2006 @ 12:57:
timestamp staat gewoon time(); waarop een reply of een topic is aangemaakt. Ik wil gewoon in de forum main waar je aantal categorieen hebt meteen op de Laatste post (de grootste timestamp) kunnen klikken en bij die post terecht komen.
Je wilt dus een lijst met threads waarin recent gepost is?

SQL:
1
2
SELECT * FROM forum_thread JOIN forum_reply ON id=threadid
ORDER BY forum_reply.timestamp GROUP BY forum_thread.id

zoiets :)

Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY forum_thread . id
LIMIT 0, 30' at line 1

Ik wil gewoon weten wat de recenste post (kan dus ook het topic zijn als er geen replies hierop zijn) in een serie van threads met replies idd

Computer Specs


Acties:
  • 0 Henk 'm!

Verwijderd

GandalfTheGrey schreef op woensdag 08 maart 2006 @ 13:04:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY forum_thread . id
LIMIT 0, 30' at line 1

Ik wil gewoon weten wat de recenste post (kan dus ook het topic zijn als er geen replies hierop zijn) in een serie van threads met replies idd
Je wilt toch niet zeggen dat je de startpost niet in forum_reply zet he... Dan zou ik heel gauw je datamodel omgooien :X

En mijn query heb ik binnen 30 seconden in mekaar geflanst, die kan dus wel fout zijn ja. Probeer het anders eens zonder die group_by

Edit: grapjas, die limit hoort daar (volgens mij) niet... :O

[ Voor 6% gewijzigd door Verwijderd op 08-03-2006 13:07 ]


Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
Die limit gooit phpmyadmin erbij :) zonder doet het ook niet. Maar de startpost zou jij dus in forum_reply gooien ? dan is het probleem ook meteen opgelost idd

[ Voor 46% gewijzigd door GandalfTheGrey op 08-03-2006 13:12 ]

Computer Specs


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

GandalfTheGrey schreef op woensdag 08 maart 2006 @ 13:04:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY forum_thread . id
LIMIT 0, 30' at line 1
timestamp is een gereserveerde naam, moet je dus even `backtics` omheen zetten (zoals je eik altijd moet doen)

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 21-09 02:04

aex351

I am the one

Ik wil als suggestie meegeven dat het handiger is om de kolom 'id' ook de naam mee tegeven van de tabel zelf. dus id_forum_reply bijvoorbeeld. Is uiteindelijk ook handiger wanneer je die id's in andere tabellen laat voorkomen.

[ Voor 26% gewijzigd door aex351 op 08-03-2006 13:14 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

Verwijderd

GandalfTheGrey schreef op woensdag 08 maart 2006 @ 13:11:
Die limit gooit phpmyadmin erbij :) zonder doet het ook niet. Maar de startpost zou jij dus in forum_reply gooien ? dan is het probleem ook meteen opgelost idd
Uiteraard...

Ik zou het zo doen:

tabel forum_posts en een tabel forum_threads.

In forum_threads hoef je de timestamp niet op te nemen, om de creatietijd op te vragen, kun je de oudste post uit forum_posts ophalen. Op deze manier houd je de logica een beetje gescheiden zeg maar :).

Acties:
  • 0 Henk 'm!

Verwijderd

Zoals eerder geopperd werd; denk goed na over je datamodel.
Meest verstandig is namelijk om het ongeveer als volgt te maken;

Tabel `fthreads`
t_id
titel
datum (optioneel, zie post boven deze)
evt. categorie, etc.

Waarbij in bovenstaande tabel geen openingspost staat!
Want:

Tabel `fposts`
p_id
t_id (relatie met threads)
bericht
datum
evt. user_id, etc.

...alle berichten zet je in een dergelijke tabel, ook de openingspost.
Op die manier kun je dus a) gemakkelijk de meest recente post opvragen en b) alle posts incl. de openingspost hetzelfde behandelen. Succes.

[ Voor 3% gewijzigd door Verwijderd op 08-03-2006 13:56 ]


Acties:
  • 0 Henk 'm!

  • GandalfTheGrey
  • Registratie: Juli 2001
  • Laatst online: 01-12-2024

GandalfTheGrey

Remember, Remember..

Topicstarter
Datamodel omgegooid :) Tis gelukt! bedankt allemaal

Computer Specs

Pagina: 1