Postcodes & provincie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Teun Hesseling

Teun Hesseling

07/10/2010 11:23:45
Quote Anchor link
Ik heb van wikipedia de postcodes gebruikt , allemaal netjes in een tabel gestopt die province heet ,dus
postcode province
1000 noord holland
1001 noord holland
1002 noord holland

nu heb ik een andere tabel die op de normale manier postcodes heeft, dus
naam postcode
gerrit 1765 WE
piet 1896 BA

wat ik nu wil is dus het volgende: als iemand bijv. gelderland invult in een input dat hij dan in province kijkt welke postcodes daarbij horen maar dan dus de gegevens weergeeft van mijn andere tabel.

ik hoop dat jullie begrijpen wat ik bedoel

Toevoeging op 07/10/2010 11:42:20:

dit is wat ik tot nu toe heb
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<html>
    <heaD>
        <title>
            verwerken
        </title>
    </heaD>
    <body>
        <table border = 2>
            <tr>
                <td>
                    Provincie
                </td>
                <td>
                    Postcode
                </td>
            </tr>
        <?php
            $searchprovince
= $_POST['searchprovince'];
            $con = mysql_connect("localhost","root","");
            mysql_select_db("gegevens",$con);
            $sql ="
                SELECT postcode,province
                FROM province
                WHERE province = '"
.$searchprovince."'
            "
;
            $result = mysql_query($sql,$con);
            while ($row = mysql_fetch_assoc($result)) {
            ?>
<tr><?php
                ?>
<td><?php
                    echo $row["province"];
                ?>
</td><?php
                ?>
<td><?php
                    $rowpostcode
= $row["postcode"];
                    echo $rowpostcode;
                ?>
</td><?php
            ?>
</tr><?php
            }
            mysql_select_db("gegevens",$con);
            $sql ="
                SELECT postcode,naam
                FROM data
                WHERE postcode = '"
.$rowpostcode."'
            "
;
            $result = mysql_query($sql,$con);
            while ($row = mysql_fetch_assoc($result)) {
            ?>
<tr><?php
                ?>
<td><?php
                    echo $row["naam"];
                ?>
</td><?php
                ?>
<td><?php
                    $rowpostcode
= $row["postcode"];
                    echo $rowpostcode;
                ?>
</td><?php
            ?>
</tr><?php
            }
            echo mysql_error();
        ?>

        </table>
    </body>
</html>
Gewijzigd op 07/10/2010 11:24:44 door Teun Hesseling
 
PHP hulp

PHP hulp

20/04/2024 01:00:31
 

07/10/2010 11:44:21
Quote Anchor link
Euh, je hebt toch niet 299 rows die allemaal Noord-Holland zijn?
 
Teun Hesseling

Teun Hesseling

07/10/2010 11:47:37
Quote Anchor link
euhmm , jawel :p maar het punt is , hoe kan ik 1001 vergelijken mete en postcode als 1001AA
 
- SanThe -

- SanThe -

07/10/2010 11:58:56
Quote Anchor link
Script is lek => sql-injection.
 
Teun Hesseling

Teun Hesseling

07/10/2010 12:02:24
Quote Anchor link
dat klopt , maar het toch aleen maar voor lokaal gebruik
 
Pieter van Linschoten

Pieter van Linschoten

07/10/2010 12:08:08
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Voorbeeld TABEL
Province Range_from Range_to
 - Noord Holland 1100 2000

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
16
17
18
<?
$row
= {'MYSQL RESULTAAT van geselecteerde provincie'};
$postcode = {'Postcode selector'};
$code = substr($postcode,0,4);

// Manier 1
$poscodes = range($row['Range_from'],$row['Range_to']);

if(in_array($code,$postcodes){

}


// Manier 2

if($code >= $row['Range_from'] && $code <= $row['Range_to']){

}

?>
 
Teun Hesseling

Teun Hesseling

07/10/2010 12:13:51
Quote Anchor link
bedankt ik zal daar eens naar kijken
 
John D

John D

07/10/2010 12:42:31
Quote Anchor link
Je kan een SELECT met BETWEEN gebruiken en het maakt niet uit of je dan alles onder elkaar hebt of dat je een range_from en range_to hebt. Dit laatste heeft qua data modellering wel de voorkeur.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT provincie
FROM   tabel
WHERE substr($postcode,4) BETWEEN range_from AND range_to
 
Teun Hesseling

Teun Hesseling

07/10/2010 13:07:38
Quote Anchor link
ik heb nu dit als testje geprobeerd
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
    $sql ="
        SELECT naam,email,postcode
        FROM data
        WHERE substr(postcode,4)BETWEEN 1000 AND 9999
    ";


maar dat doet niet veel ... of moet postcode een variabele zijn ?

Toevoeging op 07/10/2010 13:14:52:

want ik hoopte dat ik gewoon dat postcode uit mijn select er voor kon gebruiken:p
 
John D

John D

07/10/2010 13:28:38
Quote Anchor link
postcode moet een variabele zijn, de postcode die de gebruiker heeft ingevuld.
 
Teun Hesseling

Teun Hesseling

07/10/2010 13:35:03
Quote Anchor link
ah , maar de gebruiker vult geen postcode in die vult een provincie in
 

07/10/2010 13:44:56
Quote Anchor link
Dan wordt het iets à la:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT naam, email, postcode FROM mensen WHERE postcode >= (SELECT range_from FROM postcodes WHERE provincie = $prov) AND postcode <= (SELECT range_to FROM postcodes WHERE provincie = $prov)

Misschien kan het wat slimmer enzo, heb ik geen zin om over te denken. Misschien klopt het ook niet helemaal, zou d'r wat gespeeld moeten worden met de operators enzo.
Natuurlijk ook variabelen buiten quotes en de boel escapen.
 
Teun Hesseling

Teun Hesseling

07/10/2010 16:04:44
Quote Anchor link
ik ben bijna uitgespeeld maar moet nu nog 1 ding, en blijkbaar mag je niet meer dan 1 row uit een subquery krijgen(stom ding)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
            $sql ="
                SELECT naam, SUBSTRING( postcode, 0, 4 ) , postcode
                FROM DATA
                WHERE postcode = (SELECT postcode FROM province WHERE province = '".$searchprovince."')
            ";

dat werkt dus niet...
ik heb ook nog dit geprobeerd:
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
            $sql ="
                SELECT p.postcode, p.province
                FROM province AS p
                WHERE p.province = '".$searchprovince."'
            ";
            $result = mysql_query($sql,$con);
            while ($row = mysql_fetch_assoc($result)) {
                $rowpostcode = $row["postcode"];
                echo $rowpostcode;
            }            
            $sql ="
                SELECT naam, SUBSTRING( postcode, 0, 4 ) , postcode
                FROM DATA
                WHERE postcode = '".$rowpostcode."'
            ";


maar dat werkt ook niet, omdat die $rowpostcode uit de while komt en dus alleen maar het laaste getal weergeeft
en in between gaat hij ook niet werken omdat het vooral dit is: 1000-1111- drenthe 5000-5555 - drenthe
 

07/10/2010 16:13:06
Quote Anchor link
- Hoe sla je het nu op in de db?
- Heb je mijn query al geprobeerd.
- Subqueries zijn niet stom, jij snapt ze blijkbaar niet.
- Snap je überhaupt wel iets van SQL?
 
Teun Hesseling

Teun Hesseling

07/10/2010 16:26:50
Quote Anchor link
ik heb een database : gegevens
met tabellen : province en data
in tabel province staat de kollomen
province en postcode

province|postcode
-----------------
drenthe |1001
drenthe |1002
enz. | enz.
drenthe |1099
groningen |1100

naja enz.

en data

naam|email|postcode|plaats
---------------------------
teun| [email protected] |9786WS |giethoorn
kees| [email protected] |9835GH |blablaveen

en vult iemand een provincie in stel friesland (9000-9999) dan kijkt hij dus naar de cijfers van de tabel data of hun dus in friesland wonen...

en nee ik heb nog niet veel ervaring met sql, maar ik leer snel althans vind ik zelf aangezien ik het pas hooguit 2 week doe...
en ja ik heb geprobeerd maar die postcodes in niet simpel 1000-1111 en dan groningen 1112-20000 dat is 1111-1119 drenthe-1120-1130-groningen 1131-150 drenthe 1151-1170 flevoland

ik hoop dat het nu iets begrijpelijker geworden is
 

07/10/2010 16:31:15
Quote Anchor link
Ik geloof dat het makkelijker is om gewoon net zoals op wikipedia de postcodes in de database te stoppen. Alleen niet zoals jij deed, dat je de postcode range (vertaal maar naar Nederlands met mijnwoordenboek.nl ofzo), maar dus het begin in een veld te stoppen en het eind in een veld te stoppen. Dan zou als het goed is mijn query moeten werken.
Edit:
Deze query doet het ook:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT m.naam,
       m.email,
       m.postcode,
       p.provincie
FROM
       mensen AS m,
       postcode AS p
WHERE
       m.postcode >= p.range_from
AND
       p.postcode <= p.range_to
AND
       provincie = $prov

Volgens mij is deze wel beter want hij hoeft niet twee keer dezelfde query uit te voeren (weet niet of databases cachen).
Ook hoef je niet met substr ofzo te klooien, want je wilt dus via de provincie weten welke mensen er zijn met hun postcode.
Dit is de simpele db die ik in sqlite heb gebruikt om te testen:
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
16
17
18
CREATE TABLE mensen(naam varchar(255) PRIMARY KEY, email varchar(255), postcode
varchar(255), plaats varchar(255));
CREATE TABLE postcode(provincie varchar(255) PRIMARY KEY, range_from int, range_
to int);

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE postcode(provincie varchar(255) PRIMARY KEY, range_from int, range_
to int);
INSERT INTO "postcode" VALUES('Groningen',9500,9999);
INSERT INTO "postcode" VALUES('Drenthe',9400,9499);
INSERT INTO "postcode" VALUES('Friesland',8388,9299);
CREATE TABLE mensen(naam varchar(255) PRIMARY KEY, email varchar(255), postcode
varchar(255), plaats varchar(255));
INSERT INTO "mensen" VALUES('Pietje','[email protected]','9765','Hierendaar');
INSERT INTO "mensen" VALUES('Jan','[email protected]','9488','Ergens');
INSERT INTO "mensen" VALUES('Klaas','[email protected]','8500','Daar');
COMMIT;

Inclusief data (ja, weet het, datatypes zijn verkeerd, maar goed, dat is niet belangrijk bij deze test).
Gewijzigd op 07/10/2010 16:56:26 door
 
Teun Hesseling

Teun Hesseling

08/10/2010 09:19:27
Quote Anchor link
ik moest gisteren onverwachts weg , maar ik zal is kijken hoe ik het nu precies op ga lossen

Toevoeging op 08/10/2010 12:14:11:

ik kom er toch net niet helemaal uit...
ik heb het nu gedaan volegens jouw advies dus:
provincie From TO
drenthe 7740 7766
drenthe 7800 7949
drenthe 7956 7999
drenthe 8350 8354
drenthe 8380 8387
drenthe 9300 9349
drenthe 9400 9499

dat is wat ik krijg als ik drenthe in vul...
nu heb ik dit geprobeerd:

$sql = "
SELECT naam, email, postcode
FROM data
WHERE postcode >= '".$postcodefrom."'
AND postcode <= '".$postcodeto."'
";
bij deze kijkt hij alleen maar naar de laaste dus drenthe 9400-9499
en:

$sql = "
SELECT naam, email, postcode
FROM data
WHERE postcode >= (SELECT postcodefrom FROM province WHERE province = '".$searchprovince."')
AND postcode <= (SELECT postcodeto FROM province WHERE province = '".$searchprovince."')
";

en bij deze krijg ik dus de error:
Subquery returns more than 1 row
 
Niek s

niek s

08/10/2010 14:55:20
Quote Anchor link
Zit je nou zelf dit te maken?
 

08/10/2010 15:15:17
Quote Anchor link
Oke, ik had verwacht dat er maar één postcode range per provincie is. Dus daarop had ik een primary key gezet e.d.
Zoals ik ook al eerder vermeld had is die query met joins beter. Let dan wel op dat je ergens een p in een m omzet, want dat heb ik per ongeluk verkeerd gedaan.
 
Teun Hesseling

Teun Hesseling

08/10/2010 16:40:29
Quote Anchor link
@niek , nee ik heb gewoon een database met NAW gegevens van bedrijven ... soort van goudengids zeg maar, en naja daar wouw ik dus een zoekactie bijmaken dat je op provincie kunt zoeken. dat is het idee er achter, en nu had ik dus die postcode dingen gevonden op wikipedia.
 
Teun Hesseling

Teun Hesseling

11/10/2010 11:36:40
Quote Anchor link
best wel late reactie denk ik , maar dit was uiteindelijk de oplossing:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
            $sql = "
                SELECT d.naam, d.email, d.site, d.telefoon, d.straatnaam, d.postcode, d.plaats
                FROM data AS d, province AS p
                WHERE d.postcode >= p.postcodefrom
                AND d.postcode <= p.postcodeto
                AND p.province = '".$searchprovince."'
            ";


oftewel karl karl's manier :)
 

Pagina: 1 2 volgende »



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.