Hoe vrienden uit db halen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin Blokzijl

Kevin Blokzijl

07/03/2011 21:08:32
Quote Anchor link
Hallo,

Ik heb een Ledensysteem, en nu wil ik daar graag de vrienden van de gebruiker uithalen.

Nu heb ik 3 kolommen. Id, user1 en user2
Trouwens, de users komen er in te staan met de usernaam.

Maar de user waar ik nu op het profiel ben, kan in user1`staan en ook in user2

Hoe haal ik ze dan het makkelijkst eruit?

Mvg
Gewijzigd op 07/03/2011 21:10:25 door Kevin Blokzijl
 
PHP hulp

PHP hulp

28/09/2022 15:12:57
 
Jasper DS

Jasper DS

07/03/2011 21:15:42
Quote Anchor link
volgens mij heb je een verkeerd datamodel, of ik begrijp je niet.

zou je het niet beter zo doen:
leden
- id
- naam
- ..

vrienden
- id_lid
- id_vriend

als bijvoorbeeld lid 1 (mark) bevriend is met 5 (marie) en marie bevriend is met 11 (lukas)

dan staat er in vrienden
id_lid - id_vriend
1 - 5
5 - 11
 
Kevin Blokzijl

Kevin Blokzijl

07/03/2011 21:16:28
Quote Anchor link
Ik wil liever niet met id werken, omdat in de andere kolommen ook overl met de usernaam gewerkt wordt
 
Jasper DS

Jasper DS

07/03/2011 21:16:53
Quote Anchor link
dat is niet aangeraden.
 
Kevin Blokzijl

Kevin Blokzijl

07/03/2011 21:18:29
Quote Anchor link
Ok dat lijkt me dan beter,
Maar hoe haal ik dat uit de database?
Gewijzigd op 07/03/2011 21:20:44 door Kevin Blokzijl
 
Jasper DS

Jasper DS

07/03/2011 21:36:40
Quote Anchor link
kijk eens naar de sql beginners handleiding. Als het dan niet lukt, laat dan even zien wat je al hebt.
 
Kevin Blokzijl

Kevin Blokzijl

08/03/2011 18:17:28
Quote Anchor link
Al gekeken, maar kon niet vinden hoe het er staat als een id van de gebruiker in allebei de kolommen kan staan.

Daarnaast vraag ik het niet voor niks hier, een beginnershandleiding kan ik ook wel opzoeken op google.
 

08/03/2011 18:24:22
Quote Anchor link
Kevin Blokzijl op 07/03/2011 21:16:28:
Ik wil liever niet met id werken, omdat in de andere kolommen ook overl met de usernaam gewerkt wordt


PHP Jasper op 07/03/2011 21:16:53:
dat is niet aangeraden.


Onzin. Als je de username unique hebt kan je in principe ook gewoon de username als id gebruiken.
Kevin Blokzijl op 08/03/2011 18:17:28:
Al gekeken, maar kon niet vinden hoe het er staat als een id van de gebruiker in allebei de kolommen kan staan.

(...)

Deze vraag snap ik niet en lijkt mij ook niet logisch. Iemand kan toch niet vriend van zichzelf zijn (zou ik in ieder geval niet toestaan).
Gewijzigd op 08/03/2011 18:26:57 door
 
Marvin Radioo

Marvin Radioo

08/03/2011 18:27:45
Quote Anchor link
Ik snap hem wel :P

In kolom 1 kan het userid van hem staan: 1 en in kolom 2 user 2

maar het kan ook andersom, in kolom 1 2 en in kolom 2 1
Gewijzigd op 08/03/2011 18:28:50 door Marvin Radioo
 

08/03/2011 18:30:30
Quote Anchor link
Sowieso is dat op te lossen met een simpele WHERE Clause.
 
Kevin Blokzijl

Kevin Blokzijl

08/03/2011 18:37:11
Quote Anchor link
Bedankt marvin, zo bedoelde ik dat.

Maar zou je eens een voorbeeld willen geven van zo'n sql code?

Kolom 1 = user1
Kolom 2 = user2
 
Dindong Veter

Dindong Veter

08/03/2011 20:26:20
Quote Anchor link
Kevin Blokzijl op 08/03/2011 18:37:11:
Bedankt marvin, zo bedoelde ik dat.

Maar zou je eens een voorbeeld willen geven van zo'n sql code?

Kolom 1 = user1
Kolom 2 = user2



Met een WHERE Clause wat Karl Karl al zei

WHERE user1 = ID_VAN USER OR user2 = ID_VAN_USER

en dan controleren of de user waarvan je de vrienden wil laten zien 1 of 2 is

Is het 1 dan laat je user2 zien en andersom

voorbeeldje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$user_friend = ($row['user1'] == $user_id) ? $row['user2'] : $row['user1'];



Natuurlijk kan je deze controle ookzelf in de Query doen
Gewijzigd op 08/03/2011 20:33:17 door Dindong Veter
 

08/03/2011 20:39:37
Quote Anchor link
Dindong Veter op 08/03/2011 20:26:20:
Kevin Blokzijl op 08/03/2011 18:37:11:
Bedankt marvin, zo bedoelde ik dat.

Maar zou je eens een voorbeeld willen geven van zo'n sql code?

Kolom 1 = user1
Kolom 2 = user2



Met een WHERE Clause wat Karl Karl al zei

WHERE user1 = ID_VAN USER OR user2 = ID_VAN_USER

en dan controleren of de user waarvan je de vrienden wil laten zien 1 of 2 is

Is het 1 dan laat je user2 zien en andersom

voorbeeldje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$user_friend = ($row['user1'] == $user_id) ? $row['user2'] : $row['user1'];



Natuurlijk kan je deze controle ookzelf in de Query doen


Stop. Zo gaan we het niet doen.

Sowieso klopt dit al niet vanuit gebruikersperspectief. Ik hoef niet mijn vriend zijn vrienden te zien. Dat is helemaal niet de bedoeling. Misschien wil ik dat zelfs niet.
Het klopt ook niet vanuit technisch-perspectief. De tabel die Jasper voorstelt is een koppeltabel. Je kunt meerdere vrienden (meerdere persoon) hebben en een vriend (persoon) kan ook meerdere vrienden hebben. Dat betekend dus dat je niet in de record van een persoon kan aangeven welke personen hij als vrienden heeft. Dit is zelfs niet logisch om te hebben. Daarom komt dus een koppeltabel tevoorschijn. Daarin plaats je de primaire sleutel van de persoon en de primaire sleutel van een vriend. Dit samen vormt ook weer een unieke sleutel. Je kan als persoon meerdere vrienden hebben en een vriend kan dus ook meerdere vrienden hebben.
Ook klopt het niet wat jij doet aangezien je nu zegt dat beide kolommen dezelfde eigenschap hebben. Als ze dat hebben kun je ze samen voegen tot één.
 
Kevin Blokzijl

Kevin Blokzijl

08/03/2011 21:03:48
Quote Anchor link
Hoe bedoel je dat dan?
 

08/03/2011 21:05:05
Quote Anchor link
Kevin Blokzijl op 08/03/2011 21:03:48:
Hoe bedoel je dat dan?


wat?
 
Kevin Blokzijl

Kevin Blokzijl

08/03/2011 21:08:15
Quote Anchor link
Nou HOE ik dat nu moet doen.
 

08/03/2011 21:18:26
Quote Anchor link
PHP Jasper op 07/03/2011 21:36:40:
kijk eens naar de sql beginners handleiding. Als het dan niet lukt, laat dan even zien wat je al hebt.


Dit is wel iets wat hierin staat uitgelegd...
 
Roel -

Roel -

08/03/2011 23:40:35
Quote Anchor link
Karl Karl op 08/03/2011 18:24:22:
Kevin Blokzijl op 07/03/2011 21:16:28:
Ik wil liever niet met id werken, omdat in de andere kolommen ook overl met de usernaam gewerkt wordt


PHP Jasper op 07/03/2011 21:16:53:
dat is niet aangeraden.


Onzin. Als je de username unique hebt kan je in principe ook gewoon de username als id gebruiken.
Kevin Blokzijl op 08/03/2011 18:17:28:
Al gekeken, maar kon niet vinden hoe het er staat als een id van de gebruiker in allebei de kolommen kan staan.

(...)

Deze vraag snap ik niet en lijkt mij ook niet logisch. Iemand kan toch niet vriend van zichzelf zijn (zou ik in ieder geval niet toestaan).


Het is misschien niet erg, maar wat als iemand zijn of haar gebruikersnaam wilt wijzigen? Dan moet je óf heel je database doorlopen óf dat is gewoon niet mogelijk.

Zelf werk ik wel altijd op id. (behalve bij help-pagina's)
 

08/03/2011 23:47:07
Quote Anchor link
Ja, dan moet je idd wel iets afdwingen als dat de gebruikersnaam permanent is. Net zoals bij openid het geval is geloof ik.
 
Roel -

Roel -

08/03/2011 23:49:22
Quote Anchor link
Ach, ieder doet het op z'n eigen manier.
Als je liever met gebruikersnaam werkt, dan moet je dat gewoon doen.

Ik werk zelf liever met id, zie m'n argumenten.
Ook hoef ik dan minder te escapen & dus minder te typen ;-)
 
Kris Peeters

Kris Peeters

09/03/2011 10:45:40
Quote Anchor link
Roel van de Water op 08/03/2011 23:40:35:
...wat als iemand zijn of haar gebruikersnaam wilt wijzigen? Dan moet je óf heel je database doorlopen óf dat is gewoon niet mogelijk.


Ook dat is geen probleem.

Met InnoDB kan je met een foreign key werken.
Als je iets aanpast aan die username, wordt die aanpassing dan automatisch ook uitgevoerd op alle andere tabellen, waar de username aan gelinkt is.

Als je een user vernietigt, worden alle records vernietigd waar die username aan gelinkt is.

Ik volg dus Karl.
Er zijn niet echt grondige redenen om dit af te raden.
Gewijzigd op 09/03/2011 10:46:31 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.