Hoe vrienden uit db halen?
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
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
Ik wil liever niet met id werken, omdat in de andere kolommen ook overl met de usernaam gewerkt wordt
dat is niet aangeraden.
Maar hoe haal ik dat uit de database?
Gewijzigd op 07/03/2011 21:20:44 door Kevin Blokzijl
sql beginners handleiding. Als het dan niet lukt, laat dan even zien wat je al hebt.
kijk eens naar de Daarnaast vraag ik het niet voor niks hier, een beginnershandleiding kan ik ook wel opzoeken op google.
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).
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
Sowieso is dat op te lossen met een simpele WHERE Clause.
Maar zou je eens een voorbeeld willen geven van zo'n sql code?
Kolom 1 = user1
Kolom 2 = user2
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
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:
Natuurlijk kan je deze controle ookzelf in de Query doen
Gewijzigd op 08/03/2011 20:33:17 door Dindong Veter
Dindong Veter op 08/03/2011 20:26:20:
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:
Natuurlijk kan je deze controle ookzelf in de Query doen
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
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:
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.
Hoe bedoel je dat dan?
Kevin Blokzijl op 08/03/2011 21:03:48:
Hoe bedoel je dat dan?
wat?
Nou HOE ik dat nu moet doen.
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...
Karl Karl op 08/03/2011 18:24:22:
Onzin. Als je de username unique hebt kan je in principe ook gewoon de username als id gebruiken.
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).
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)
Ja, dan moet je idd wel iets afdwingen als dat de gebruikersnaam permanent is. Net zoals bij openid het geval is geloof ik.
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 ;-)
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