Toon posts:

[database] ontwerp forum-database *

Pagina: 1
Acties:

Verwijderd

Topicstarter
In ASP ben ik een forum aan het bouwen. De opzet is ongeveer de volgende:

Eerst logt een gebruiker in waarbij de userID uit de gebruikersdatabase als session variable weggeschreven wordt. Wanneer hij een bericht plaatst in het forum stuurt het Form automatisch zijn userID mee.

Dit wordt opgeslagen als de inzenderID in de berichtendatabase tezamen het de inhoud van het bericht.

Wanneer de lijst met berichten wordt opgevraagd gebeurt het volgende: uit de recordset met gebruikersgevens haalt de server bij ieder getoont bericht de informatie over de gebruiker die het bericht heeft ingezonden. Hiertoe wordt dus de record getoont waarbij de userID overeenkomt met de inzenderID uit de recordset met berichtgegevens.

so far so good hoop ik. Mijn vraag is nu hoe ik de vergelijking tussen de twee moet maken. Ik zie het voor me dat ik ergens in de repeat zone een filter moet bouwen die de record toont waarbij de string userID overeenkomt met de string inzenderID. Zit ik op de goede weg? Overigens vraag ik geen brokken code, wil gewoon weten of ik het zo goed aanpak.

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
een sql-statementje:

code:
1
2
3
select tblBerichten.*
from tblBerichten
where tblBerichten.inzenderID = " & session(userID)


Het resultaat van deze SELECT steek je in een recordset. Die recordset loop je dan af en een voor een toon je dan de recordjes.

[ Voor 43% gewijzigd door Feyd-Rautha op 22-01-2003 16:42 ]

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Ik denk dat je eerst even een tutorial over relationele databases moet lezen. Het lijkt nu alsof je id's als string hebt wat al erg vies is, en dat je niet weet wat joins zijn.

Verder is het slim het forum op papier te tekenen, te kijken welke velden je wilt hebben en kijken welke velden je kunt groeperen (zoals gebruikergegevens, post, thread ) en hoe je deze aan elkaar relateert.
Daaruit rollen dan vanzelf je tabellen met verwijzende sleutels en de primary keys.

Verwijderd

Topicstarter
De volgende methode leek me wel elegant om bijvoorbeeld de "username" te tonen. Het probleem is dat deze niet werkt omdat hij alleen in de eerste record kijkt van de userdatabase terwijl hij deze helemaal moet doorzoeken natuurlijk. Zo krijg ik dus alleen resultaat als het bericht toevallig van de persoon met userID "1" afkomt.
code:
1
2
3
4
5
<%
If ((rsUser.Fields.Item("userID.Value) =
(rsBerichten.Fields.Item("inzenderID").Value)) Then
Response.Write (rsUser.Fields.Item("username").Value)
%>


werkt dus niet, nu probeer ik het met zo's sql statement, alvast dank Feyd-Rautha. Resultaat volgt zo.

[ Voor 7% gewijzigd door Verwijderd op 22-01-2003 16:56 . Reden: slordige opmaak ]


Verwijderd

Topicstarter
Als ik het goed begrijp voert dat SQL statement dezelfde filter uit die mijn ASP scriptje doet. Dan is er nog steeds de noodzaak om de gehele recordset te tonen. Dit levert dan een hoop lege resultaten op (zoals mijn bovenstaande voorbeeld) en een overeenkomend resultaat. Blijft dus voor me over om alle records af te lopen. Ga dat dan ff uitvinden.

Verwijderd

Topicstarter
Ik denk trouwens niet dat je de session(userID) hiervoor moet gebruiken omdat het geen relatie heeft met de huidige bezoeker. Het gaat erom om de gegevens uit twee databases bijeen te zoeken. Wat Geert geloof ik bedoelt heeft vooral zin als ik de twee databases samenvoeg tot verschillende tabellen in een database zodat ik deze in de database kan relateren. Toch Geert? Zou wel eleganter zijn denk ik ja. Misschien zit de oplossing daar.

Verwijderd

Topicstarter
Op mijn maniertje (moet toch ook werken?) heb ik het volgende geprobeerd:

Een repeat om alle records af te lopen met daarin een IF statement die moet bepalen wanneer een UserID overeenkomt met het inzenderID. Wanneer aan deze voorwaarde wordt voldaan moet het een "username" produceren. Geen speld tussen te krijgen toch?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<% 
While ((Repeat1__numRows <> 0) AND (NOT rsGebruikers.EOF)) 
%>
<%
If ((rsGebruikers.Fields.Item("userID").Value) =
 (reacties.Fields.Item("inzenderID").Value)) Then
 Response.Write (rsGebruikers.Fields.Item("username").Value)
%>
<% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rsGebruikers.MoveNext()
Wend
%>


Hij komt echter zonder informatie terug (en zonder error). Zonder het IF statement ervoor produceert hij wel een lijst van alle gebruikers. Zit er iets stoms in het IF statement? :(

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
Prinsroy, als je eens naar jouw postings kijkt, zie je rechts een aantal icoontjes. Een daarvan is 'edit message'. Gelieve daar in het vervolg eens gebruik van te maken ipv 4 postings na elkaar te doen.

https://fgheysels.github.io/


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16:18

.oisyn

Moderator Devschuur®

Demotivational Speaker

* titelfix

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Volgens mij gaat het niet zozeer om het database ontwerp. Ik heb al aangegeven dat het model zoals hij nu gebruikt erg vreemd is maar hij lijkt toch door te willen gaan met die code.

Een passende titel zou ik niet weten maar dit lokt denk ik verkeerde reacties uit. ;)

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Waarom maak je eigenlijk gebruik van 2 databases?
Het is toch veel makkelijker om 1 database te gebruiken?

Wat wil je nu eigenlijk als resultaat krijgen?
1. Alle berichten met daarbij de gebruiker (inzender)
2. Alle berichten van een bepaalde gebruiker (inzender)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 04-08 07:59

chem

Reist de wereld rond

Wat je wil zijn JOINs. Zoek maar eens een willekeurige tutorial op Google.

Klaar voor een nieuwe uitdaging.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Joins tussen verschillende databases? :o

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 04-08 07:59

chem

Reist de wereld rond

Gert schreef op 22 januari 2003 @ 20:17:
Joins tussen verschillende databases? :o

Ik nam even aan dat men hier de termen database en tabellen door elkaar haalt.

Anders wordt het op voorbaat een rommeltje en/of een trage boel.

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
De voornaamste vraag was of ik op het goede spoor zat. Blijkbaar ben ik niet handig bezig. Ik had twee losse databases voor gebruikers en berichten (eerst had ik al oefening een simpel forum gebouwd). Het is dus handiger eerst een stapje terug te gaan en de database opnieuw op te bouwen. Mijn dank in ieder geval.

p.s. waarom dat script nou niet werkt begrijp ik nog steeds niet...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<% 
While ((Repeat1__numRows <> 0) AND (NOT rsGebruikers.EOF)) 
%>
<%
If ((rsGebruikers.Fields.Item("userID").Value) =
 (reacties.Fields.Item("inzenderID").Value)) Then
 Response.Write (rsGebruikers.Fields.Item("username").Value)
%>
<% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rsGebruikers.MoveNext()
Wend
%>

[ Voor 6% gewijzigd door Verwijderd op 22-01-2003 21:30 . Reden: typo ]

Pagina: 1