Toon posts:

[SQL] buddylist systeem binnen community.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer met behulp van ASP en SQL2000 een community site te bouwen. Je meld je eerst aan als member; wanneer je je hebt aangemeld sta je in de tabel MEMBER, waar je een NICKNAME en een MEMBERID hebt. Mijn probleem zit in een vriendjes systeem:

Je kan van een gebruiker die je in de lijst ziet staan aangeven of het een vriendje van je is. Zijn MEMBERID wordt dan in de tabel FRIEND ingevoerd, samen met jouw MEMBERID. Laten we werken vanuit het perspectief van Kees [memberid=1] die de site bezoekt.

Afbeeldingslocatie: http://www.glam.nl/question/member.gif

Afbeeldingslocatie: http://www.glam.nl/question/friend.gif

Nu wil ik op de site twee verschillende overzichten genereren:
- een ledenlijst
- een detailweergave van een MEMBER, waarbij een lijstje met wederzijdse vrienden van deze persoon staat.

Het probleem is dat er bij de nicknames een status moet komen te staan, wat de relatie van de persoon die ingelogged is [in dit geval Kees].

Er zijn 3 statussen die ik wil tonen:
1. Geen vriend
2. Ik wil vrienden zijn met deze persoon
3. We zijn wederzijdse vrienden.

Afbeeldingslocatie: http://www.glam.nl/question/ledenlijst.gif

Afbeeldingslocatie: http://www.glam.nl/question/vriendenlijst.gif

Ik heb deze vraag nogal uitgebreid gesteld, maar het is dan ook best een complex probleem, waar ik na vele tutorials en probeersels niet uitkom.

Het ASP gedeelte waar ik alles uitlees is het probleem niet; waar ik naar op zoek ben, zijn adviezen over hoe ik het beste de SQL queries kan opbouwen.. omdat dit op vele manier zou kunnen; maar ik ben op zoek naar de fraaiste oplossing.

Ik kwam al tot het doen van twee queries [een van members en een van friends], die ik synchroon naast elkaar in een loop mee laat lopen, maar ik ben ervan overtuigd dat het ook via een SELECT te doen is --zucht--

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Laat eens zien wat je al aan SQL hebt en waar je daarin niet uit komt.

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Als je nu eens een veld met de status bijhoudt? Dan ziet uw tabel 'Friends' er als volgt uit:
code:
1
  MemberId  FriendId  Status

Als een member dan 'vriendjes' wil zijn met een andere member, dan insert je een record in die tabel voor deze member/friend en met het statuusid van 'ik wil vriend zijn'. Accepteert die andere dan die aanvraag, dan ga je dat record gaan updaten met de status 'wederzijdse vrienden' en ga je nog een record gaan toevoegen, maar dan uit het oogpunt van de member die geaccepteerd heeft.
Als je het strict bekijkt kun je wel zeggen dat er redundante gegevens opgeslagen worden, maar imho komt dat in dit geval de performance zeker ten goede. (Datamodellen worden wel eens vaker een beetje 'gedenormaliseerd' om de performance te verhogen).

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami; ik heb zelf ook geprobeerd een soort van statusveld te maken: Een bit value genaamd vice_versa in de friends table.

vice_versa = true: we zijn wederzijdse vrienden
vice_versa = false: ik wil vrienden zijn met deze persoon

de volgende SQL string gaf dan een redelijk resultaat voor de ledenlijst, in combinatie met wat asp:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT * FROM (friend RIGHT JOIN member 
ON friend.memberid_friend=member.memberid 
AND friend.memberid=1)

If isNull(Query("memberid_friend")) then
 %>Geen vriend<%
else
 if Query("vice_versa") then
  %>Ik wil vrienden zijn met deze persoon<%
 else
  %>We zijn wederzijdse vrienden.<%
 end if
end if

wat vinden jullie van deze oplossing?

Edit: code tags toegevoegd.