Komt postcode Y voor tussen postcode X en postcode Z

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick Most

Patrick Most

27/01/2015 12:14:32
Quote Anchor link
Goedendag,

Allereerst zal ik omschrijven wat ik probeer te doen en daarna wat ik reeds gedaan heb en gezocht heb:

Wat ik graag wil bereiken:

Ik heb een database met de volgende gegevens:
id (int 5)
postcode1 (varchar 6)
postcode2 (varchar 6)
omschrijving (varchar 50)

Ik wil kijken of een postcode valt tussen postcode range "postcode1" en "postcode2".

Dus stel 1 range is:
postcode1 = 2012EA
postcode2 = 2012EK

Dan wil ik dus b.v. kijken of postcode 2012EB voorkomt tussen 2012EA en 2012EK
(ongeacht of de postcode 2012EB bestaat of niet)


Wat heb ik geprobeerd:

Allereerst pak ik de 4 cijfers en de 2 letters van ingevoerde postcode d.m.v. substr.
Controleer ik of de 4 cijfers voorkomen in de reeks postcode1?
Als die voorkomt haal ik de id`s, postcode1 en postcode2 op uit de database waarbij de 4 cijfers voorkomen in de postcode1 reeks. Deze zet ik in $postcodelijst (array)

Vervolgens trek ik de 2 letters uit de ingevoerde postcode uit elkaar en zet ik ze beide om naar een cijfer. De letters zet ik om in cijfers door gebruik te maken van de ASCII tabel

$pcletter_1_getal = intval(ord(strtolower ($ingevoerde_pc_letter1))-96);
$pcletter_2_getal = intval(ord(strtolower ($ingevoerde_pc_letter2))-96);

Als ik 2012EB heb ingevoerd dan heb ik deze nu dus uit elkaar getrokken en omgezet naar:
2012
E = 5
B = 2

Nu loop ik alle postcode1's door die voorkomen in $postcodelijst om ook hier de letters om te zetten naar cijfers.
Vervolgens kijk ik of een van die postcodes uit de $postcodelijst dus 2 letters bevat die gelijk zijn aan of kleiner zijn dan de 2 letters van de ingevoerde postcode. Bij een match sla ik de id`s van de postcodes op in een $idlijst

Vervolgens haal ik van alle id`s waarbij dus een match voorkomt op postcode1 -> postcode2 op uit $postcodelijst en doe ik vervolgens exact hetzelfde als bij postcode1 echter nu de controle of de ingevoerde postcode letters kleiner of gelijk zijn aan de letters van postcode2. Als dit matcht dan komt de ingevoerde postcode voor tussen een postcode1 en postcode2 en is het resultaat dus:

Ja komt voor tussen postcode1 en postcode2 met id?




Dit is een hoop code om te controleren of een ingevoerde postcode voorkomt tussen een postcode1 en postcode2.

Ik vroeg me af of er ook een andere manier is om te controleren of b.v. postcode 2012EB voorkomt tussen postcode 2012EA en postcode 2012EK, wat minder rekenkracht vergt en sneller een resultaat bied.


Ik heb via google al gezocht naar:
- php script check of postcode voorkomt tussen 2 postcodes
- php check if postal between columns
- komt postcode voor tussen 2 postcodes
- check if zipcode exist between 2 zipcodes
- compare zipcodes with 2 zipcodes
- vergelijk postcode met 2 postcodes
- postcode vergelijken
etc.. etc..

Maar 99% van de resultaten die naar voren komen, gaan over de afstand tussen 2 postcodes berekenen.


Heeft iemand een idee / tip?
 
PHP hulp

PHP hulp

20/04/2024 00:49:15
 
Thomas van den Heuvel

Thomas van den Heuvel

27/01/2015 12:22:42
Quote Anchor link
Kun je niet gewoon gebruik maken van de alfabetische (lexicografische) sortering?

BETWEEN werkt prima?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT '2012EB' BETWEEN '2012EA' AND '2012EK';
+----------------------------------------+
| '2012EB' BETWEEN '2012EA' AND '2012EK' |
+----------------------------------------+
|                                      1 |
+----------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT '2012EZ' BETWEEN '2012EA' AND '2012EK';
+----------------------------------------+
| '2012EZ' BETWEEN '2012EA' AND '2012EK' |
+----------------------------------------+
|                                      0 |
+----------------------------------------+
1 row in set (0.00 sec)


EDIT: iets soortgelijks kun je ook doen in PHP door strings te vergelijken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if ('2012EB' >= '2012EA' && '2012EB' <= '2012EK') {
    echo 'cake :)';
}
else {
    echo 'no cake :(';
}

?>
Gewijzigd op 27/01/2015 12:27:15 door Thomas van den Heuvel
 
Ward van der Put
Moderator

Ward van der Put

27/01/2015 12:40:40
Quote Anchor link
Een gewone stringvergelijking werkt hier ook:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT id, omschrijving
  FROM postcodetabel
  WHERE postcode1 >= '...'
  AND postcode2 <= '...'


Wil je het in stukken knippen, dan kun je eventueel eerst een exacte match zoeken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT id, omschrijving
  FROM postcodetabel
  WHERE postcode1 = '...'
  OR postcode2 = '...'
 
Patrick Most

Patrick Most

27/01/2015 13:07:12
Quote Anchor link
Thanks Thomas en Ward,

Ik voel me best dom nu, terwijl ik between al had getest en toen niet werkend kreeg.
Echter is het nu inderdaad gelukt door 1 simpele query

SELECT id,omschrijving FROM postcodetabel WHERE postcode1 <= '2012EB' AND '2012EB' <= postcode2

Dank jullie wel, dit scheelt een hoop verwerkingstijd en cpukracht!

Mvg,
Patrick
Gewijzigd op 27/01/2015 13:08:36 door Patrick Most
 



Overzicht Reageren

 
 

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.