Beste allemaal,

Wie heeft of kent een goed werkend stratenherkenninsscript dat ik kan gebruiken voor mijn agenda om taxiritten in te voeren.

IK deel online een agenda met 4 collega's en wij voeren met z'n allen veel reserveringen in.
Dit vergt in de regel allemaal veel tijd en niet iedereen voert de straatnamen soms goed in.
Ik ben op zoek naar een soort systeem dat wanneer ik bijvoorbeeld bij het invoerveld "adres" de letter D invul, ik automatisch kan kiezen uit een lijst met alle straten in Zaanstad beginnende met een D.
Vul ik Do in, dat dan de mogelijkheden automatisch minder worden en het systeem alle straten laat zien beginnende met Do, om vervolgens uit de lijst die verschijnt, Dorpsstraat te kunnen selecteren en dat dat dan in het veld adres terecht komt.
Ik stel me zo voor dat ik in de database en paar tabellen erbij moet maken, en daar alle straten van Zaanstad moet invoeren.
Nu is het geval dat Zaanstad bestaat uit een aantal samengevoegde gemeenten en dat de Dorpstraat dus wel 3 keer voor kan komen.
Ik stel me zo voor dat ik dan een aparte tabel per deelgemeente moet maken enz enz.

Is er iemand van jullie dat ooit eens zo'n script ontwikkelt heeft, kent, of wil helpen(heel veel wil helpen om dit te realiseren.

mvg

Peter Arendse
@Peter

Je vult de kolommen met de combinaties (id's) van de straten en gemeenten zoals je ze in de andere tabellen hebt staan.

Bijvoorbeeld in tabel Gemeenten heeft Amsterdam -> id: 1 En Zaandam id: 2

Nu heeft bijna elke dorp of stad wel een dorpsstraat. Dorpsstraat komt maar 1 keer voor in de tabel met de straten, en heeft id: 5.

In de tabel straten_gemeenten krijg je dan 2 records (voor dorpsstraat in a'dam en dorpsstraat in Zaandam)

Gemeente_id, Straat_id
1, 5
2, 5

Nu zie je dat er zowel een dorpsstraat is in Amsterdam als in Zaandam. Get it?
Je moet nog een primary key toevoegen aan die tabel. Je zou dit kunnen doen door een PK toe te voegen op de combinatie van beide kolommen. Maar wellicht vind je het iets makkelijker om nog een extra kolom 'id' met een auto_increment aan te maken en daar de primary key op te zetten.

Deze derde tabel gebruik je om de straten aan de gemeenten te koppelen. In de tabel met straten komt elke straat namelijk maar 1x voor, maar het kan natuurlijk best zo zijn dat dezelfde straatnaam in meerdere gemeente voorkomt. Dat los je dus zo op:

straten
==========
id | straat
-----------
1  | dorpsstraat
2  | breestraat

gemeenten
==============
id | gemeente
----------------
1  | zaandam
2  | zaandijk

straten_gemeenten
===================
id | straat_id | gemeente_id
--------------------------------
1  | 1         | 1
2  | 1         | 2
3  | 2         | 1

Oftewel, straat 1 (dorpstraat) komt voor in gemeente 1 en 2, en straat 2 (breetraat) komt voor in gemeente 1.
Ja okay, tot zover heb ik je, maar bijvoorbeeld in tabel 1 de eerste kolom is:ID_STRAAT BGINT AUTO INCREMENT PRIMAIRE SLEUTEL

Maar in tabel 3 heb ik achter de kolom naam alleen nog maar BGINT en INT, moet ik daar geen aut increment of sleutels aanhangen?
Aan dat straat_id en gemeente_id in tabel 3 moet je een Foreign Key Contraint hangen. Dit zijn namelijk foreign keys die verwijzen naar het id uit respectievelijk de straten en gemeenten tabellen...
okay, begrepen, maar ik zit in phpadmin, en kan volgens mij nergens foreign key aanvinken met Contraint, of wel?

EDIT: ik lees net ergens het volgende:
"In phpMyAdmin zitten geen foreign keys, ze hebben iets gemaakt wat er een beetje op lijkt : Relation tables...Maar dat staat heel duidelijk uitgelegd in de help-files van PMA.

Wil je daadwerkelijk gebruik gaan maken van FK in je applicaties moet je zorgen dat al je tabellen van het type InnoDb zijn, die ondersteunen namelijk wel foreign keys, in tegenstelling tot MyISAM en Heap. "

is dat wat ik ook moet doen nu?
Yep Innodb is de beste mysql DB.
een foreign key houd je data integriteit en consistentie in de gaten, scheelt bij grote systemen een hoop php script werk
Klaas Jan, er staat om 1 of andere reden wel gevorderd achter mijn naam, maar dat ben ik niet.
Ik heb nu dit:

Tabel Actie Records Type Collatie Grootte Overhead
gemeenten ~11 InnoDB latin1_swedish_ci 16,0 KB -
straten ~0 InnoDB latin1_swedish_ci 16,0 KB -
straten_gemeenten ~0 InnoDB latin1_swedish_ci 16,0 KB -

Maar hoe krijg ik die foreign key er aan, ik kan dat nergens vinden in phpmyadmin?
Peter Arendse schreef op 24.12.2007 12:26
swedish_ci

Uh ..............
Ik heb niets er aan veranderd hoor Santhe, is standaard ingesteld denk ik, moet of kan ik dat veranderen dan?
Een SQL dump die je kunt gebruiken:

-- 
-- Table structure for table `gemeenten`
-- 

CREATE TABLE `gemeenten` (
  `id` int(4) NOT NULL,
  `gemeente` varchar(100) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `gemeente` (`gemeente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- 
-- Dumping data for table `gemeenten`
-- 


-- --------------------------------------------------------

-- 
-- Table structure for table `straten`
-- 

CREATE TABLE `straten` (
  `id` int(8) NOT NULL auto_increment,
  `straat` varchar(100) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `straat` (`straat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

-- 
-- Dumping data for table `straten`
-- 


-- --------------------------------------------------------

-- 
-- Table structure for table `straten_gemeenten`
-- 

CREATE TABLE `straten_gemeenten` (
  `id` int(8) NOT NULL auto_increment,
  `straat_id` int(8) NOT NULL,
  `gemeente_id` int(4) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `straat_id` (`straat_id`),
  KEY `gemeente_id` (`gemeente_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

-- 
-- Dumping data for table `straten_gemeenten`
-- 


-- 
-- Constraints for dumped tables
-- 

-- 
-- Constraints for table `straten_gemeenten`
-- 
ALTER TABLE `straten_gemeenten`
  ADD CONSTRAINT `straten_gemeenten_ibfk_2` FOREIGN KEY (`gemeente_id`) REFERENCES `straten_gemeenten` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `straten_gemeenten_ibfk_1` FOREIGN KEY (`straat_id`) REFERENCES `straten` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Alle contraints, keys en indexen zijn op een juiste manier aangebracht.

Reageren