[php] Parents toewijzen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Beste tweakers,

In navolging op mijn vorige topic (\[PHP/mySQL] Hierarchische structuur (array)), heb ik een andere vraag. Het is misschien heel eenvoudig op te lossen, maar ik zie door de bomen het bos even niet meer.

Na het importeren van een Excelbestand met onderstaande structuur (dit is een vereenvoudigde weergave), wil ik de hierarchie bepalen door middel van het toewijzen van de betreffende parents en deze opslaan in de database.

- Auto
---- Renault
------- Deur
---------- Handgreep
---------- Slot
---- Skoda
------- Deur
---------- Handgreep
---------- Slot

Naam:Parent:
Auto-
RenaultAuto
DeurRenault
HandgreepDeur
SlotDeur
SkodaAuto
DeurSkoda
HandgreepDeur
SlotDeur


Het probleem zit 'm in het bepalen van de parent op het moment dat de naam 2x identiek voorkomt in de lijst (in dit geval dus 'Deur', 'Handgreep' en 'slot').

Wat ik wil is de volgende output:

level_id:level_parent:level_name:
10Auto
21Renault
32Deur
43Handgreep
53Slot
61Skoda
76Deur
87Handgreep
97Slot


Kan iemand mij in de goede richting helpen?

Acties:
  • 0 Henk 'm!

  • Arjan90
  • Registratie: September 2005
  • Laatst online: 20:14
Voor mijn gevoel mis ik wat extra informatie, maar eigenlijk is Deur een "child" van Auto, en niet exclusief een "child" van Renault.

Als je het ook per merk zou willen, dan zou je een extra kolom kunnen toevoegen (en een extra tabel), de kolom is dan bijv. level_brand_id (1 = Renault, 2 = Skoda, etc.). Je moet er dan ook een extra tabel bij maken met de kolommen brand_id en brand_name.

"Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid."


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Arjan90 schreef op donderdag 30 april 2015 @ 10:11:
Voor mijn gevoel mis ik wat extra informatie, maar eigenlijk is Deur een "child" van Auto, en niet exclusief een "child" van Renault.
Het zijn 2 hele andere relaties.

Renault is a Car
Door part of Car
Lock part of Door

Wellicht zijn deze 2 soorten informatie niet in 1 enkel `parent` kolom te vatten. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:49

Janoz

Moderator Devschuur®

!litemod

Beredeneer eerst waarom de onderste Slot een bij de deur moet die bij skoda hoort, en niet de deur die bij renault hoort. Als je dat opgeschreven hebt dan weet je ook hoe je dat in code op moet schrijven lijkt me.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Bedankt voor jullie snelle reactie. Dit is een voorbeeld. Het thema 'auto' is hier fictief en is in werkelijkheid een takenlijst met categorieen en taken.

Waar het mij om gaat is het principe hoe je o.b.v. deze datastructuur (die helaas niet te veranderen is) de juiste parents bepaald.

In werkelijkheid is het dus iets als:

Naam:Parent:
Categorie 1-
Subcategorie 1Categorie 1
Subcategorie 1 - 1Subcategorie 1
Subcategorie 1 - 1 - 1 Subcategorie 1 - 1
Taak 1Subcategorie 1 - 1 - 1
Taak 2Subcategorie 1 - 1 - 1
Subcategorie 1Categorie 1
Subcategorie 1 - 1Subcategorie 1
Subcategorie 1 - 1 - 1 Subcategorie 1 - 1
Taak 1Subcategorie 1 - 1 - 1
Taak 2Subcategorie 1 - 1 - 1


Dus de kolom 'Naam' en 'Parent' kunnen dezelfde naam bevatten, terwijl het wel een nieuw level moet zijn.

[ Voor 63% gewijzigd door radem205 op 30-04-2015 10:20 ]


Acties:
  • 0 Henk 'm!

  • DLGandalf
  • Registratie: Maart 2005
  • Laatst online: 06-07 19:01
Is de volgorde consistent? Of wel in dit geval, alle rijen die bv renault volgen, horen werkelijk bij de laatstgenoemde auto?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:49

Janoz

Moderator Devschuur®

!litemod

Nogmaals, leg ons uit waarom jij denkt dat id 9 parent 7 krijgt en niet parent 3. Als je dat uit kunt leggen kun je het in code schrijven. Wij kunnen alleen gokken wat het is op basis van dit kleine voorbeeld, maar elke gok barst van de aannames.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Janoz schreef op donderdag 30 april 2015 @ 10:21:
Nogmaals, leg ons uit waarom jij denkt dat id 9 parent 7 krijgt en niet parent 3. Als je dat uit kunt leggen kun je het in code schrijven. Wij kunnen alleen gokken wat het is op basis van dit kleine voorbeeld, maar elke gok barst van de aannames.
Zoals DLGandalf aangeeft, hoort de laatste regel altijd bij de laatstgenoemde parent (zie vorige voorbeeld). Dus de Subcategorie 1 - 1 hoort altijd bij de laatste Subcategorie 1, enz..

Acties:
  • 0 Henk 'm!

  • Khallouki
  • Registratie: Oktober 2006
  • Laatst online: 10-07 23:50
Het maakt toch helemaal niet uit dat de namen gelijk zijn? Zolang je maar op basis van de identieke ID omhoog kunt gaan in de hierachie kom je erachter wat de parent is (Renault of Skoda).

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:49

Janoz

Moderator Devschuur®

!litemod

radem205 schreef op donderdag 30 april 2015 @ 10:24:
[...]


Zoals DLGandalf aangeeft, hoort de laatste regel altijd bij de laatstgenoemde parent (zie vorige voorbeeld). Dus de Subcategorie 1 - 1 hoort altijd bij de laatste Subcategorie 1, enz..
Dan heb je toch je oplossing? Dan hoort Slot toch bij de deur die je als laatste toegevoegd hebt?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1