Beste PHPHulpers, ik vraag mij af hoe ik een vriendensysteem bouwen kan,

moet ik apart een table aanmaken genaamd friends?, graag hulp.


Mvg (verzonden vanaf imac, kan typfouten bevatten)
Een switch? Ik zie niet echt in wat dat hiermee te maken heeft?
- Aar - op 20/04/2014 13:18:41

- Status (E_NUM: pending, accepted, blocked)

ENUM type in een tabel opnemen (evenals SET) is een inherent slechte optie. Bedenk dat je je tabel structuur moet gaan aanpassen als er een extra optie bijkomt. Gebruik in plaats daarvan een TINYINT met ofwel een extra tabel om de tekst waardes te kunnen joinen, of definieer de tekst waardes in een php bestand. Scheelt je een hoop moeite als je morgen bedenkt dat er nog een extra niveau bij moet komen.

True, ik geef toe dat het niet netjes is.
Maar als je elke wijziging achteraan plaatst, is er toch weinig kans op fouten? Feit is alleen dat je de structuur moet aanpassen bij een nieuwe toevoeging (die ik overigens voor een friend-request-systeem niet zou verwachten)
Er gaat niets mis als je iets toevoegt, maar je database structuur aanpassen omdat je een extra waarde wilt opslaan is wat mij betreft een no-no. Net zo erg als kolommen met nummers gebruiken...

Iets niet verwachten is ook een recept voor fouten. Bij een vrienden systeem kan ik me bijvoorbeeld al voorstellen dat je op zeker moment een gradatie wil instellen voor vrienden ('e_friend', 'real_friend', 'boy_friend') om maar iets te noemen.
Mja, op dat punt heb je gelijk dat je beter een extra tabel wilt gebruiken.
Ehh, is het nou wel of niet een goede oplossing?, en hoe laat ik de vrienden dan zien, en hoe laat ik mensen elkaar toevoegen(, blokkeren wordt simpel dan ;))
SELECT FriendID FROM Friends WHERE RequestUserID = 1234 AND Status ='accepted'
Aar, jij nodigd mij uit als vriend, ik accepteer dat (natuurlijk ;-)). Dan sta ik wel in jouw vrienden lijst, maar jij niet in de mijne.
Dus de query moet iets uitgebreider:

SELECT FriendID FROM Friends WHERE RequestUserID = 1234 AND Status ='accepted'
UNION
SELECT RequestUserID FROM Friends WHERE FriendID = 1234 AND Status ='accepted'

Reageren