Toon posts:

[MySQL/PHP] Linked Accounts

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi Tweakers,

Ik heb een database met hierin abonnees, ieder account heeft een eigen ID.
Vaak is het zo dat ieder familielid een eigen account heeft, ik heb een veld die noem ik linkID, hierin komt het ID van het account waarnatoe is gelinkt.
Dit maakt het dus mogelijk om kinderen aan de ouders te linken.

Kan iemand me in de goede richting duwen hoe ik dit het makkelijkste (en het netste) kan doen in MySQL.
Het is de bedoeling dat de linked accounts/kinderen een eigen opmaak in de tabel krijgen.

Groetjes Chris

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Jouw linkID impliceert een 1:many relatie. Dus één account is aan meerdere accounts gelinked via het linkID. Dat lijkt me bij families niet zozeer de situatie, want er is een many:many relatie: een of meerdere kinderen kan je linken aan een of meerdere (meestal 2) ouders.

Ik zou dus het voorstel doen om juist accounts te groeperen, door middel van een accounts-tabel, een familie-tabel en een veld in de accounts-tabel die aangeeft in welke familie het account zich bevindt. Dat is ook weer een 1:many relatie, maar dan uitgebreid met een familie-niveau in je categorisering.

Maar uit nieuwsgierigheid: waarom wil je deze functionaliteit? Wat is uiteindelijk je beoogde doel met de koppeling?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mithras schreef op woensdag 30 maart 2011 @ 14:50:
Jouw linkID impliceert een 1:many relatie. Dus één account is aan meerdere accounts gelinked via het linkID. Dat lijkt me bij families niet zozeer de situatie, want er is een many:many relatie: een of meerdere kinderen kan je linken aan een of meerdere (meestal 2) ouders.

Ik zou dus het voorstel doen om juist accounts te groeperen, door middel van een accounts-tabel, een familie-tabel en een veld in de accounts-tabel die aangeeft in welke familie het account zich bevindt. Dat is ook weer een 1:many relatie, maar dan uitgebreid met een familie-niveau in je categorisering.

Maar uit nieuwsgierigheid: waarom wil je deze functionaliteit? Wat is uiteindelijk je beoogde doel met de koppeling?
Je hebt zeg maar een lijst met accounts, en ik wilde het zo maken dat je kinderen onder de ouders komen te staan met een aparte opmaak. (een tab bijvoorbeeld).

Graag wil ik het wel in 1 tabel hebben dus ben nu aan het knutselen met subqueries (wat tot nu toe niet werkt |:( )

Acties:
  • 0 Henk 'm!

  • Joostje123
  • Registratie: September 2010
  • Laatst online: 15:12
Tabel - Velden
Users - ID, Naam
Values
1, Mama
2, Papa
3, Kind
4, Kind2

Tabel - Velden
Relation - OuderID, KindID
Values
1, 3
1, 4
2, 3
2, 4

Zo zal ik het doen

Oh zie net 1 tabel....

Als je het in 1 tabel wil is het lastig met meerdere kinderen.
Want je kan dan wel velden doen van Kind1, Kind2 en Kind3 maar dan kan je blijven doorgaan
En Kinderen met values 1, 2, 3 is ook niet netjes.

[ Voor 40% gewijzigd door Joostje123 op 30-03-2011 14:59 ]


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

ik volg joostje123 toch wel, het is veel simpeler in meerdere tabellen, want in een tabel ga je oftewel meerdere kolomen moeten toevoegen als je naar meerdere accounts wil linken, maar die gaan dan weer leeg zijn als je maar naar 1 of geen account wil linken, wat dan weer niet zo goed is.

Ik zou echt proberen met 2 tabellen te werken, een tabel accounts en een tabel relaties.

Uitbreiding: neem een derde tabel en noem deze, relatietype, en dan kan je in de tabel relaties nog een type aan de relatie meegeven (ouder-kind/ broer-zus/ ...)

Just me


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Stop met in SQL denken en bedenk eerst welke relatie je uberhaupt tussen je entiteiten wilt.

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voutloos schreef op woensdag 30 maart 2011 @ 15:08:
Stop met in SQL denken en bedenk eerst welke relatie je uberhaupt tussen je entiteiten wilt.
}:O

Bedankt allemaal.

Wat ik nu heb is:
SELECT * , (SELECT GROUP_CONCAT(id) AS id FROM `tblaccount` as child WHERE child.linkID=parent.id)
as child FROM `tblaccount` as parent WHERE parent.linkID='0'

Output:
Array
(
[id] => 2
[linkID] => 0
[firstName] => Wil
[child] => 3,4
)

Het mooiste was geweest als ik via MySQL van child een array had kunnen maken waardoor je alle informatie niet opnieuw hoeft op te vragen.
Hier kan het ook en dan maar een extra querietje:)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb in het verleden eens een database moeten maken voor een stamboom (gaat nog een stapje verder). Daar gebruikte ik een aparte tabel voor de relaties:
code:
1
2
3
4
5
relations
- id
- person_id (id van "huidige" persoon)
- relation_id (id van "gekoppelde" persoon)
- type (parent, married, etc)


Op deze manier kun je heel gemakkelijk verschillende queries doen:
SQL:
1
2
3
4
5
/* alle kinderen */
SELECT persons.* FROM persons, relations WHERE persons.id = relations.relation_id AND relations.person_id = X AND relations.type = 'parent';

/* man van.. */
SELECT persons.* FROM persons, relations WHERE persons.id = relations.person_id AND relations.relation_id = X AND relations.type = 'married';


Let er wel goed op dat je alles dan op dezelfde manier gaat invullen zodat er geen duplicaten ontstaan;
- ID 1 is parent van ID 2
- ID 2 is child van ID 1
Zeggen beide hetzelfde, maar is erg lastig om uit elkaar te houden wanneer je het wilt gaan tonen.

Dus gebruik altijd Vader heeft Kind (parent/child), Vader heeft Vrouw (married), Vrouw van Man heeft geen Kinderen (want heeft Man al!). Je kan het op geslacht dichten, maar dat is tegenwoordig eigenlijk uit den boze...

Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

en als je met 3 tabellen werkt kunnen 2 mensen meerdere relaties hebben, maar een ander type bv. vader-zoon kan ook baas-werknemer zijn met dezelfde personen, want je vader kan ook je baas zijn als je werkt in het familiebedrijf.
als je snapt wat ik bedoel :p

Just me


Acties:
  • 0 Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

Volgens een stamboom standaard GEDCOM heeft een kind volgens mij altijd 2 ouders. Zo is het een 2 op veel relatie en kan je het in 1 tabel kwijt. Ik dacht dat iemand ook altijd maar 1 partner heeft (gehad). Ik weet niet helemaal zeker of dit in de standaard ook zo is bedacht. (Het kan ook dat een simpel export van de stamboom het zo opzet).

Er zitten wel nadelen aan:
Als een kind een biologische ouders heeft en pleegouders kan je dit niet opslaan.
De partner werd bij allebei de personen opgeslagen deze moet je dus bij allebei updaten. (Kan je oplossen door alleen man vrouw relaties opslaan).
Als iemand hertrouwd kan je alleen de laatste partner opslaan.

Een relatietabel is veel handiger omdat je hier de relatie veel beter kan opslaan. Getrouwd, gescheiden, biologisch kind, pleegkind, relatie met 2 mensen. (edit: dus relatie tussen 3 mensen "zie: big love")

@Terminal13:
Ik denk dat deze afspraken op een gegeven moment mis gaan. Hoe sla je 2 getrouwde vrouwen op? Ga je dan de een het mannetje noemen?
Ik zou de kinderen overigens bij de vrouw als je toch voor een dergelijke oplossing kiest. De biologische vrouw heeft namelijk automatisch zeggenschap, de niet getrouwde man niet.
Maar als de man en de vrouw gescheiden zijn? Zijn dan de kinderen alleen nog van de vrouw? Je zal dus toch de relatie tussen kind en vader en kind en moeder moeten opslaan. Sla dan toch maar child -> parent op in plaats van parent -> child.

[ Voor 3% gewijzigd door ajakkes op 31-03-2011 08:25 ]

👑

Pagina: 1