Geneste Items

Door Daan , 14 jaar geleden, 4.337x bekeken

Geneste items in een database opslaan en er weer uithalen is iets wat vaak best lastig lijkt, maar wat eigenlijk best meevalt. In deze tutorial zal ik uitleggen hoe je dit handig kunt aanpakken.

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. Wat zijn geneste items?
  3. Geneste items opslaan
  4. Geneste items ophalen
  5. Opslaan in XML
  6. Slotwoord en referenties

 

Er zijn 10 reacties op 'Geneste items'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Terence Hersbach
Terence Hersbach
14 jaar geleden
 
0 +1 -0 -1
ouder_id INT UNSIGNED NOT NULL DEFAULT '0',

ouder met het id 0 zal nooit bestaan. Zodra je een relatie gaat leggen, zal dit niet werken omdat id = 0 niet bestaat. Doe daarom het volgende:

ouder_id INT UNSIGNED NULL DEFAULT NULL,

Zo zeg je dat de ouder niet bekend is, en kan je relaties leggen (met innoDB):

Ik verwijder de ouder en dan heb ik niets meer aan de kinderen, dus gooi die ook weg:

ALTER TABLE test ADD FOREIGN KEY (ouder_id) REFERENCES product(item_id) ON DELETE CASCADE;

(typfouten voorbehouden)
Frank -
Frank -
14 jaar geleden
 
0 +1 -0 -1
Quote:
ouder met het id 0 zal nooit bestaan. Zodra je een relatie gaat leggen, zal dit niet werken omdat id = 0 niet bestaat.
Dat is (helaas) niet waar, dit is (weer eens) volledig afhankelijk van de instellingen van MySQL. En dat kan per server, per database, per connectie verschillend zijn. Eigenlijk weet je dus nooit waar je aan toe bent...

Het betreft deze setting:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO'

Hiermee bepaal je of een id de waarde 0 mag hebben of dat de auto_increment dan +1 moet toepassen.

Dit is weer zo'n voorbeeld waarom MySQL sucks en waarom je niet met PhpMyAdmin "backups" kunt maken. Die neemt dit soort settings niet mee in de "backup", de "backup" is dan ook volkomen waardeloos.
Onbekend Onbekend
Onbekend Onbekend
14 jaar geleden
 
0 +1 -0 -1
Gefeliciteerd, je hebt mijn script goed nagemaakt! http://phphulp.nl/php/scripts/1/1405/

@Terence: Waarom zou je ooit data verwijderen uit een database? Gewoon een kolom toevoegen deleted = 0 en als het op 1 staat is het verwijderd. En dan zijn dus automatisch de children van dat item ook verwijderd dus hoef je totaal niets met FK's te doen. En een menu zal nooit zo groot worden dat die rij?n die 'verwijderd' zijn daadwerkelijk moeilijkheden gaan veroorzaken omdat de tabel te vol staat.
Daan
Daan
14 jaar geleden
 
0 +1 -0 -1
@Tommy: Ohh, wat lullig.. Die had ik niet eens gezien (a). Ik had gezocht of er al zoiets op phphulp stond, maar zie nu dat de zoekfunctie hiernaast (<---) standaard op alleen tutorials staat. Ik ben helemaal vergeten om ook op scripts te zoeken.

Edit:
Ik heb in de tutorial een linkje naar je script toegevoegd.

Edit 2:
@pgFrank: Ik heb je reactie nog een keer gelezen, maar ik kom er niet helemaal uit. Lever je nou commentaar op mij, op Terence, of op allebij?
(en natuurlijk op PhpMyAdmin, dat snapte ik nog wel ;)
Onbekend Onbekend
Onbekend Onbekend
14 jaar geleden
 
0 +1 -0 -1
PMA zuigt, gebruik liever HeidiSQL
Frank -
Frank -
14 jaar geleden
 
0 +1 -0 -1
@Daan: Mijn commentaar begint met de stelling van Terence dat een 0 nooit zou kunnen bestaan en gaat vervolgens verder met de uitleg welke problemen er met bovenstaande code kunnen optreden. 0 en NULL zijn verschillende dingen, maar je zou ook nog een 1 kunnen krijgen wanneer er geen 0 maar een 1 als eerste id wordt aangemaakt... Allemaal problemen die je cadeau krijgt bij het gebruik van MySQL.

Neem even de juiste configuratie settings op in je tutorial en er zijn minder onduidelijkheden over de juiste waardes. We raken wel wat offtopic, want om hier nu alle problemen van MySQL te gaan bespreken.... ;)
Daan
Daan
14 jaar geleden
 
0 +1 -0 -1
Ik heb de auto increment waarde standaard op 1 gezet en uitgelegd waarom. Ik hoop dat dat voldoende is.
Tim
tim
14 jaar geleden
 
0 +1 -0 -1
ALtijd al coole scrits voor je site willen verdiennen en makkelijk en gratis ook? dat kan op XXXXXXXXXX dit gaat door klikmissies en dergelijke dus neem snel een kijkje !!! :D

SPAM-adres verwijderd.

SanThe
Pakito
Pakito
14 jaar geleden
 
0 +1 -0 -1
nice tutorial :)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. Wat zijn geneste items?
  3. Geneste items opslaan
  4. Geneste items ophalen
  5. Opslaan in XML
  6. Slotwoord en referenties

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

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.