Hallo ik zit met een ingewikkelde vraag.
In mijn database heb ik de volgende tabellen:
Gob_provincies en
Gob_plaats, met de volgende structuur:
Ik kan via een sql query per gemeente alle plaatsen in de betreffende provincie opvragen, dit werkt verder allemaal prima. Maar nu moet er nog een waarde bijkomen, namelijk: Gemeente.Code:CREATE TABLE IF NOT EXISTS `gob_plaats` ( `plaats` varchar(25) NOT NULL, `provincie` varchar(25) NOT NULL, PRIMARY KEY (`plaats`,`provincie`), KEY `provincie` (`provincie`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Per provincie zijn er allemaal verschillende gemeenten en per gemeente weer verschillende plaatsen.
Hoe moet de structuur van de gemeente er dan komen uit te zien en wat moet er veranderd worden aan de structuur van gob_plaats?
- Php/Sql ingewikkelde vraag
-
20-10-2010, 12:20 #1
- Berichten
- 408
- Lid sinds
- 16 Jaar
Php/Sql ingewikkelde vraag
-
In de schijnwerper
Koningsdag kortingsacties!LinkpartnersProduct feed grid V1.7 - Creer een affiliate shop in 2 min - WP plugin - V1.7 NU LIVEPHP scriptsIk ga stoppen met mijn bedrijf - Domeinnamen en WP plugins zijn nog beschikbaarOverige dealsOpzoek naar extra werkzaamheden tarief -> €18,50 per uurFreelance / Werk -
20-10-2010, 12:27 #2
- Berichten
- 75
- Lid sinds
- 15 Jaar
Re: Php/Sql ingewikkelde vraag
Ik zou dit anders oplossen.
3 tabellen maken
-Provincies
-Gemeentes
-Plaatsen
En dan ID's gebruiken als Foreign Keys.
Zoiets dus:
tProvincies:
-ID
-Naam
tGemeenten:
-ID
-Naam
-ProvincieID
tPlaatsen:
-ID
-Naam
-GemeenteID
Een gemeente ligt dan in een provincie, en een plaats ligt dan in een gemeente.
Je kan dan voor plaatsen die niet in een gemeente liggen(maar zelf de gemeente zijn) het GemeenteID leeg laten.
-
20-10-2010, 12:42 #3
- Berichten
- 408
- Lid sinds
- 16 Jaar
Re: Php/Sql ingewikkelde vraag
Dat is wel een mooie oplossing, wanneer een plaats gelijk een gemeente is.
Zou je mij misschien wat meer uitleg kunnen geven over het toepassen van Foreign Keys?
-
20-10-2010, 12:54 #4
- Berichten
- 75
- Lid sinds
- 15 Jaar
Re: Php/Sql ingewikkelde vraag
In dit geval gebruik je die alleen maar om de relatie tussen de verschillende entiteiten weer te geven, bijvoorbeeld:
tProvincie:
1,Utrecht
2,Gelderland
...
tGemeente:
1,Utrecht,1
2,Hilversum,1
3,Amersfoort,1
4,Arnhem,2
...
tPlaats:
1,De Meern,1
2,Vleuten,1
3,Nieuwegein,null
...
-
20-10-2010, 13:12 #5
- Berichten
- 750
- Lid sinds
- 15 Jaar
Re: Php/Sql ingewikkelde vraag
Houd er wel rekening mee wanneer je Foreign Keys gebruikt je de tables wel de store engine innodb moet gebruiken.
Wat Mark aangeeft is wel een goed voorbeeld van database
normalisatie. Met foreign keys hou je de data op consistent wat wel belangerijk is.
-
20-10-2010, 15:10 #6
- Berichten
- 408
- Lid sinds
- 16 Jaar
Re: Php/Sql ingewikkelde vraag
Bedankt het is gelukt, alleen nu heb ik nog een vraag over de weergave omdat dit werkt met foreach en ik hier weinig ervaring mee heb.
Hier staat het voorbeeld online: http://bit.ly/ccfYAN
En de code:Code:<?php $query = mysql_query('SELECT * FROM gob_plaats ORDER BY provincie'); $results = array(); while (($list = mysql_fetch_assoc($query)) != null) { $results[$list['provincie']][] = $list['plaats']; } ?> <table cellpadding="3" cellspacing="3" border="0"> <?php foreach ($results as $provincie => $plaatsen) { ?> <tr> <td><h3 style="margin:0;"><?php print $provincie; ?></h3></td> </tr> <tr> <td bgcolor="#df97bd" width="120px" valign="top"><strong><font color="white">{Gemeente}</font></strong</td> <td bgcolor="#df97bd" width="200px"><strong><font color="white">Woonplaats</font></strong></td> </tr> <tr> <td width="120px" valign="top"></td> <td> <?php foreach ($plaatsen as $plaats) { ?> <a href="http://www.link-is-nvt.nl/<?php print $provincie; ?>"><?php print $plaats; ?><br /></a> <?php } ?><br> </td> </tr> <?php } ?> </table>
De bedoeling is dat er op de plek van {Gemeente} de gemeente komt te staan.
BijCode:$results[$list['provincie']][] = $list['plaats'];
-
28-10-2010, 21:28 #7
- Berichten
- 277
- Lid sinds
- 17 Jaar
Re: Php/Sql ingewikkelde vraag
Je moet het iets anders doen namelijk:
Code:SELECT * FROM tProvincie,tGemeente,tPlaats WHERE tProvincie.id=tGemeente.ProvincieID AND tPlaats.GemeenteID=tGemeente.id ORDER BY tProvincie.Naam
-
03-11-2010, 13:06 #8
- Berichten
- 408
- Lid sinds
- 16 Jaar
Re: Php/Sql ingewikkelde vraag
Nu heeft mijn opdrachtgever net laten weten dat het gedeelte van de provincies niet meer hoeven.. al het werk voor niets :s
Maja op het profiel van de gastouders moeten ook hun kinderen worden vermeld.
Deze zijn in een tabel gezet als: naam_1, geboortedatum_2, geslacht_3, naam_2, enz.
Deze laat ik zien met de volgende code:
Code:<div class="titel">Voor de opvang van</div> <div class="bericht"> <table cellpadding="4" cellspacing="0" border="0"> <?php while($list = mysql_fetch_object($res)) { ?> <tr> <td width="150px" align="right"><strong><?php echo ucfirst($list->naam_1); ?></strong></td> <td width="470px"><?php echo $list->geslacht_1; ?>, geboren <?php echo $list->geboortedatum_1; ?></td> </tr> <?php } ?> </table> </div>
Ik hoop dat jullie begrijpen wat ik bedoel.
-
03-11-2010, 13:11 #9
64BitsWebhosting.EU
- Berichten
- 2.085
- Lid sinds
- 18 Jaar
Re: Php/Sql ingewikkelde vraag
Dit zijn toch wel allemaal een beetje erg basic vragen. Voor je opdrachten aanneemt is het wellicht handig je eerst eens een beetje meer te verdiepen in php, mysql en programmeren in het algemeen?
Ook in dit geval zit je weer met een tabelstruktuur die gewoon niet goed is opgezet namelijk. De juiste manier om dit soort dingen op te zetten is je in de 1ste reactie van Mark al gegeven.
Gewoon even zelf verder denken en die methode doortrekken in de rest van je db.
-
03-11-2010, 13:31 #10
- Berichten
- 92
- Lid sinds
- 14 Jaar
Re: Php/Sql ingewikkelde vraag
Ik vraag me inderdaad of hoe je tabel eruit ziet als je rekening houd met families met tot wel 17! kinderen?
-
03-11-2010, 13:39 #11
- Berichten
- 408
- Lid sinds
- 16 Jaar
Re: Php/Sql ingewikkelde vraag
@John Timmer, daar heb je inderdaad gelijk in, maar het toevoegen van die gemeentes en kinderen was eerst niet de bedoeling en had ik ook niet meegenomen in de offerte.
@Rickv, de tabelstructuur is inderdaad niet zo netjes. Er moeten maximaal 4 kinderen in kunnen, dus mensen die meer kinderen hebben, die hebben dan denk ik pech?:P
maar de structuur ziet er momenteel zo uit:
Code:CREATE TABLE IF NOT EXISTS `gob_kinderen` ( `hash` varchar(50) NOT NULL, `naam_1` varchar(50) NOT NULL, `geboortedatum_1` varchar(15) NOT NULL, `geslacht_1` varchar(8) NOT NULL, `naam_2` varchar(50) NOT NULL, `geboortedatum_2` varchar(50) NOT NULL, `geslacht_2` varchar(8) NOT NULL, `naam_3` varchar(50) NOT NULL, `geboortedatum_3` varchar(15) NOT NULL, `geslacht_3` varchar(8) NOT NULL, `naam_4` varchar(50) NOT NULL, `geboortedatum_4` varchar(15) NOT NULL, `geslacht_4` varchar(8) NOT NULL, KEY `gastouder_id` (`hash`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-
03-11-2010, 13:57 #12
- Berichten
- 92
- Lid sinds
- 14 Jaar
Re: Php/Sql ingewikkelde vraag
Waarom zou je niet per kind een record toe kunnen voegen? Als je deze al koppelt aan de andere tabel is het helemaal simpel ("SELECT * FROM `gob_kinderen` WHERE `hash` = '".$gastouder_id."'")
-
03-11-2010, 14:04 #13
- Berichten
- 408
- Lid sinds
- 16 Jaar
Re: Php/Sql ingewikkelde vraag
Thnx voor je input rick, ik heb het nu anders gedaan. Ik laat per kind een record toevoegen. En omdat er standaard een hash wordt meegegeven kan het zijn dat bijv het 3e en 4e kind niet bestaan maar wel een hash hebben, dus heb ik in de select query meegegeven: WHERE hash = '".$row->hash."' AND naam IS NOT NULL
Bedankt allemaal
-
03-11-2010, 14:14 #14
- Berichten
- 1.499
- Lid sinds
- 17 Jaar
Re: Php/Sql ingewikkelde vraag
Thnx voor je input rick, ik heb het nu anders gedaan. Ik laat per kind een record toevoegen. En omdat er standaard een hash wordt meegegeven kan het zijn dat bijv het 3e en 4e kind niet bestaan maar wel een hash hebben, dus heb ik in de select query meegegeven: WHERE hash = '".$row->hash."' AND naam IS NOT NULL
Bedankt allemaal
-
03-11-2010, 14:25 #15
- Berichten
- 22
- Lid sinds
- 14 Jaar
Re: Php/Sql ingewikkelde vraag
Hij snapt denk ik nog steeds niet hoe je een goede database opzet.
Voor elk type waar er meer dingen van zijn (beetje rare benaming) heb je een aparte tabel:
provincies
plaatsen
advertenties
Bij elke record in een van die tabellen (behalve provincie) maak je een veld `parentid` waarin je dus bijvoorbeeld zet bij welke provincie een plaats hoord, bij welke plaats een persoon hoord etc.
Ga dus niet moeilijk doen met voor elke persoon een veld aan te maken, dan heb je ook geen last meer van die max. 4.Laatst aangepast door Stijn Martens : 03-11-2010 om 21:13
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic