Postcodes & provincie
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
Ik heb van 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)
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
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>
<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
Euh, je hebt toch niet 299 rows die allemaal Noord-Holland zijn?
euhmm , jawel :p maar het punt is , hoe kan ik 1001 vergelijken mete en postcode als 1001AA
Script is lek => sql-injection.
dat klopt , maar het toch aleen maar voor lokaal gebruik
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bedankt ik zal daar eens naar kijken
Code (php)
1
2
3
4
5
2
3
4
5
$sql ="
SELECT naam,email,postcode
FROM data
WHERE substr(postcode,4)BETWEEN 1000 AND 9999
";
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
postcode moet een variabele zijn, de postcode die de gebruiker heeft ingevuld.
ah , maar de gebruiker vult geen postcode in die vult een provincie in
Code (php)
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.
Code (php)
1
2
3
4
5
2
3
4
5
$sql ="
SELECT naam, SUBSTRING( postcode, 0, 4 ) , postcode
FROM DATA
WHERE postcode = (SELECT postcode FROM province WHERE province = '".$searchprovince."')
";
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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."'
";
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
- Heb je mijn query al geprobeerd.
- Subqueries zijn niet stom, jij snapt ze blijkbaar niet.
- Snap je überhaupt wel iets van SQL?
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
Edit:
Deze query doet het ook:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
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).
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
dit te maken?
Zit je nou zelf 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.
@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.
Code (php)
1
2
3
4
5
6
7
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."'
";
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 :)