Numerieke huisnummers komen als BCD http://www.foondump.nl/forum/viewtopic.php?p=876#876
-codes uit het databestand maar zodra er nog iets achter het huisnummer staat wordt het een string van het formaat “huisnummer/toevoeging”.
Als je zelf een csv-export uit het menu van de CD-foongids doet zie je het al:
Huisnummers en toevoegingen zelf scheiden is te doen maar je zal er even voor moeten gaan zitten omdat men niet consequent de schuine streep (ook wel slash, solidus, oblique, virgule, stroke, slant, forward slash, diagonal, over, slak, virgule of slat) als scheidingsteken gebruikt maar ook streepjes of spaties.
Volgens http://www.tpgpost.nl/business//images/AVP%202005-def_tcm42-58855.pdf
de Posterijen (TNTPost) krijgt men voor automatische verwerking het beste resultaat met een spatie voor de toevoeging als die met een letter begint en verder hoofdletter(s), in plaats van een spatie een liggend streepje als het eerste teken van de huisnummertoevoeging een cijfer is.
tja, dit is niet de mooiste oplossing maar ik split het nu inderdaad maar gewoon via een scriptje:
[code]<?
$db = mysql_connect(‘localhost’, ‘foondump’, ‘foondump’) or die('Could not connect: ’ . mysql_error($db));
if (!mysql_select_db(‘foondump2005’, $db)) echo "Could not connect to foondump: " . mysql_error($db);
echo "Add extension field to table… this will take some time… ";
mysql_query(“ALTER TABLE white_subscriber ADD extension VARCHAR( 15 ) NOT NULL AFTER housenumber;”);
echo “done\n”;
echo "examine all housenumbers and split in housenumber and extension… ";
$query = mysql_query(“select id,housenumber from white_subscriber”);
$c=0;
while ($array = mysql_fetch_array($query)) {
$h = “”;
$t = “”;
De grondslag is dat Foondump de data precies zo dumpt als in de cdfoongids aanwezig is. Het is dus niet onze keuze maar van de cdfoongids.
(1 uitzondering, streetnameextension komt zo weinig voor dat we die aan streetname plakken).
Het is geen probleem. LIKE gebruiken om te selecteren en naar een INTEGER casten om te sorteren. Zie ook de queries in fs2005.php
Ik denk dat dat tegen de gedachte van Foondump ingaat, om de data te dumpen zoals die in de gids staat. Dus dat is niet zo handig. Je moet de wijziging dan elke versie van Foondump zelf opnieuw maken.
Wat handiger is, is je SQL queries aanpassen, en dan is er niks aan de hand. Of de nu gebruikte oplossing inzetten, dat is op zich ook een slimme oplossing.
Dat is niet helemaal waar. Als je LIKE gebruikt met een wildcard (% of ?) aan het begin, kan geen gebruik worden gemaakt van indexen. LIKE ‘%kema’ kan immers zowel ‘alkema’ als ‘zalkema’ matchen.
Maar als je % op het einde gebruikt, dan is dat probleem er niet. ‘34%’ matched alleen huisnummers die alfabetisch met 34 beginnen. Dus 34-a, 34/AB of 341. Maar niet 12 en ook niet 9.
[quote=“rgj”]Dat is niet helemaal waar. Als je LIKE gebruikt met een wildcard (% of ?) aan het begin, kan geen gebruik worden gemaakt van indexen. LIKE ‘%kema’ kan immers zowel ‘alkema’ als ‘zalkema’ matchen.
Maar als je % op het einde gebruikt, dan is dat probleem er niet. ‘34%’ matched alleen huisnummers die alfabetisch met 34 beginnen. Dus 34-a, 34/AB of 341. Maar niet 12 en ook niet 9.[/quote]
Ben ik toch niet volledig met je eens.
Ook in fs2005.php gaat het fout.
voorbeeldje, woon je op postcode 1234AB met huisnr 10 toevoeging A.
zoek je op 1234AB huisnr 10, komt er geen resultaat.
Inderdaad zoeken op “10%” zou een oplossing kunnen zijn…
echter wat je zegt over casten als integer, dat kan inderdaad… helaas kun je dat resultaat niet opnemen in je where clause.
Dus eigenlijk heb je niet zoveel aan het als integer gecaste huisnr.
Daarnaast krijg je bij het zoeken op 10% ook huisnr 100-109 en nog hogere huisnrs.
vervelender indien je zoekt op huisnr 1-9 want dan krijg je echt veel hits.
opzich natuurlijk niet erg als je handmatig iets opzoekt, wel vervelend tijdens een automatisch zoekproces
Dus nogsteeds blijf ik erbij dat het opsplitsen met bovenstaande script hiervoor de beste oplossing is.
Ik heb even mijn geheugen opgefrist en ik had inderdaad ooit een handigere truuk dan LIKE gevonden. Naar een integer casten werkt namelijk prima in een WHERE in MySQL, als je het impliciet doet.
[quote=“rgj”]Ik heb even mijn geheugen opgefrist en ik had inderdaad ooit een handigere truuk dan LIKE gevonden. Naar een integer casten werkt namelijk prima in een WHERE in MySQL, als je het impliciet doet.
Knap, want in fs2005.php wordt dus helemaal geen LIKE gebruikt voor huisnummers… :roll:[/quote]
AH thanks, dan weet ik gelijk waar t fout ging bij mij…
had de query uit fs2005.php overgenomen,
waarin het casten dus in de select gebeurd en niet in de where
select (housenumber+0.00) as housenr where housnr = 1 werkt dus niet…
echter ben ik nog wel van mening dat de index efficienter is op alleen integers in die kolom maar daar valt wel mee te leven lijkt mij.
misschien trouwens een id om die query in t php script ook aan te passen naar de query die je net noemde ?