Sorteren of dichtstbijzijnde getal
Als ik sorteer op getal dan komt een vestiging met de ingevoerde postcode dus meestal in het midden van de resultaten te staan.
Is er een manier om te beginnen met het ingevoerde postcode en daarna telkens het dichtstbijzijnde getal dus zowel lager als hoger.
2 variabelen maken 1 die 50 hoger is dan de de ingevoerde postcode, de andere 50 lager en dan met een sql qeury kijken met een in between met het oorspronkelijke postcode als uitganspunt
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
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
<?
//connect to the database
$db= mysql_connect("GEGEVENS") or die("Kan geen verbinding maken");
$mydb=mysql_select_db("NAAM");
$zoekterm = $_GET['zoekterm'];
$value1 = $zoekterm - 50;
$value2 = $zoekterm + 50;
$sql = 'SELECT * FROM Filialen WHERE postcode >= '.$value1.' AND postcode <= '.$value2.'';
{
if ($first == false)
$sql .= ' AND ';
$first = false;
$sql .= "(`postcode` LIKE '%$tw%') ";
}
$sql .= 'ORDER BY `postcode` ASC LIMIT 0, 20';
$res = mysql_query($sql) or die('fout in query : '. mysql_error());
if ($res && mysql_num_rows($res) >= 1)
{
echo '<table>
<tr>
<td width="200"><h3>Naam</h3></td>
<td width="200"><h3>Adres</h3></td>
<td width="200"><h3>Plaats</h3></td>
</tr>';
while ($row = mysql_fetch_array($res))
{
echo '<tr>
<td><a href="http://'.$row['website'].'" target="_blank">'.$row['naam'].'</a></td>
<td>'.$row['adres'].'</td>
<td>'.$row['plaats'].'</td>
</tr>';
}
echo '</table>';
} else {
echo 'Geen data gevonden';
}
?>
//connect to the database
$db= mysql_connect("GEGEVENS") or die("Kan geen verbinding maken");
$mydb=mysql_select_db("NAAM");
$zoekterm = $_GET['zoekterm'];
$value1 = $zoekterm - 50;
$value2 = $zoekterm + 50;
$sql = 'SELECT * FROM Filialen WHERE postcode >= '.$value1.' AND postcode <= '.$value2.'';
{
if ($first == false)
$sql .= ' AND ';
$first = false;
$sql .= "(`postcode` LIKE '%$tw%') ";
}
$sql .= 'ORDER BY `postcode` ASC LIMIT 0, 20';
$res = mysql_query($sql) or die('fout in query : '. mysql_error());
if ($res && mysql_num_rows($res) >= 1)
{
echo '<table>
<tr>
<td width="200"><h3>Naam</h3></td>
<td width="200"><h3>Adres</h3></td>
<td width="200"><h3>Plaats</h3></td>
</tr>';
while ($row = mysql_fetch_array($res))
{
echo '<tr>
<td><a href="http://'.$row['website'].'" target="_blank">'.$row['naam'].'</a></td>
<td>'.$row['adres'].'</td>
<td>'.$row['plaats'].'</td>
</tr>';
}
echo '</table>';
} else {
echo 'Geen data gevonden';
}
?>
________________________________________
Hoe geef ik aan dat 'zoekterm'startpunt moet zijn?
als iemand zijn postcode invult in een textvak moet je POST gebruiken niet GET, anders moet achter je url nog ?zoekterm= komen te staan
Als je kiest voor een aparte query, wordt e.e.a. natuurlijk een stuk eenvoudiger wat PHP code betreft.
De url van het resultaat overzicht neemt met die script ook de zoekterm mee
@Blanche
Houd je dan niet het probleem dat na het weergeven van de ingevoerde term allen nummer nog steeds op normale volgorde staan.
Voorbeeld. Ik zoek op postcode 4000
Dan wil ik alle vestigingen met postcode tussen 3950 en 4050 laten zien (dat doet het al)
En de filialen binnen deze range zou zijn: 3951,3970,3999, 4000, 4002, 4015 en 4048.
Dan wil ik dat de getoonde volgorde is:
4000;3999;4002;4014;3970;4048;3951
Bijkomend probleem is dat ik zonder iets veranderd te hebben de db niet kan oproepen, ook inloggen via MyPHP lukt niet meer:
#1045 - Access denied for user 'NAAM'@'IP' (using password: YES)
Terwijl ik niks gewijzigd heb.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
postcode,
ABS(postcode - [zoekterm]) AS verschil
FROM
Filialen
WHERE
postcode BETWEEN [zoekterm] + 50 AND [zoekterm] - 50
AND
postcode LIKE '%[zoekterm]%'
ORDER BY
verschil DESC
postcode,
ABS(postcode - [zoekterm]) AS verschil
FROM
Filialen
WHERE
postcode BETWEEN [zoekterm] + 50 AND [zoekterm] - 50
AND
postcode LIKE '%[zoekterm]%'
ORDER BY
verschil DESC
Zo zou de structuur van je query eruit kunnen komen te zien...
Heb zelfs een nieuw wachtwoord aangevraagd en nog zegt ie :
#1045 - Access denied for user 'user'@'IP' (using password: YES)
gisterenavond werkte alles nog perfect en er is niks veranderd.
Hmm, lijkt me dat je met zo'n probleem wel bij je host terecht kunt? Verder is het misschien een idee om lokaal een testserver te installeren. Er bestaan standaard pakketten die Apache, PHP en MySQL met een paar klikken installeren (WAMP bijvoorbeeld).
je script werkt helaas niet. Krijg een foutmelding op de Unexpected [
[zoekterm] vervangen door $zoekterm ?
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
<?
//connect to the database
$db= mysql_connect("db", "login", "ww") or die("Kan geen verbinding maken");
$mydb=mysql_select_db("naam");
$zoekterm = $_GET['zoekterm'];
$value1 = $zoekterm - 50;
$value2 = $zoekterm + 50;
$sql = 'SELECT
postcode,
ABS(postcode - $zoekterm) AS verschil
FROM
Filialen
WHERE
postcode BETWEEN $zoekterm + 50 AND $zoekterm - 50
AND
postcode LIKE '%zoekterm%'
ORDER BY
verschil DESC
';
{
if ($first == false)
$sql .= ' AND ';
$first = false;
$sql .= "(`postcode` LIKE '%$tw%') ";
}
$sql .= 'ORDER BY `postcode` ASC LIMIT 0, 20';
$res = mysql_query($sql) or die('fout in query : '. mysql_error());
if ($res && mysql_num_rows($res) >= 1)
{
echo '<table>
<tr>
<td width="200"><h3>Naam</h3></td>
<td width="200"><h3>Adres</h3></td>
<td width="200"><h3>Plaats</h3></td>
</tr>';
while ($row = mysql_fetch_array($res))
{
echo '<tr>
<td><a href="http://'.$row['website'].'" target="_blank">'.$row['naam'].'</a></td>
<td>'.$row['adres'].'</td>
<td>'.$row['plaats'].'</td>
</tr>';
}
echo '</table>';
} else {
echo 'Geen data gevonden';
}
error is nu:
Warning: Division by zero in /public/sites/www.site.nl/result.php on line 98
Warning: Division by zero in /public/sites/www.site.nl/result.php on line 101
fout in query : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND (`postcode` LIKE '%%') ORDER BY `postcode` ASC LIMIT 0, 20' at line 1
//connect to the database
$db= mysql_connect("db", "login", "ww") or die("Kan geen verbinding maken");
$mydb=mysql_select_db("naam");
$zoekterm = $_GET['zoekterm'];
$value1 = $zoekterm - 50;
$value2 = $zoekterm + 50;
$sql = 'SELECT
postcode,
ABS(postcode - $zoekterm) AS verschil
FROM
Filialen
WHERE
postcode BETWEEN $zoekterm + 50 AND $zoekterm - 50
AND
postcode LIKE '%zoekterm%'
ORDER BY
verschil DESC
';
{
if ($first == false)
$sql .= ' AND ';
$first = false;
$sql .= "(`postcode` LIKE '%$tw%') ";
}
$sql .= 'ORDER BY `postcode` ASC LIMIT 0, 20';
$res = mysql_query($sql) or die('fout in query : '. mysql_error());
if ($res && mysql_num_rows($res) >= 1)
{
echo '<table>
<tr>
<td width="200"><h3>Naam</h3></td>
<td width="200"><h3>Adres</h3></td>
<td width="200"><h3>Plaats</h3></td>
</tr>';
while ($row = mysql_fetch_array($res))
{
echo '<tr>
<td><a href="http://'.$row['website'].'" target="_blank">'.$row['naam'].'</a></td>
<td>'.$row['adres'].'</td>
<td>'.$row['plaats'].'</td>
</tr>';
}
echo '</table>';
} else {
echo 'Geen data gevonden';
}
error is nu:
Warning: Division by zero in /public/sites/www.site.nl/result.php on line 98
Warning: Division by zero in /public/sites/www.site.nl/result.php on line 101
fout in query : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND (`postcode` LIKE '%%') ORDER BY `postcode` ASC LIMIT 0, 20' at line 1
postcode,
ABS(postcode - '.$zoekterm.') AS verschil
FROM
Filialen
WHERE
postcode BETWEEN ('.$zoekterm.' + 50) AND ('.$zoekterm.' - 50)
AND
postcode LIKE '%'.$zoekterm.'%'
ORDER BY
verschil DESC '
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql= "........
WHERE
postcode BETWEEN $zoekterm + 50 AND $zoekterm - 50
AND
postcode LIKE '%zoekterm%'
.....";
?>
$sql= "........
WHERE
postcode BETWEEN $zoekterm + 50 AND $zoekterm - 50
AND
postcode LIKE '%zoekterm%'
.....";
?>
Dan kan je volgens mij lang zoeken.
Stel je zoekt op postcode 1234 dan wordt de query dus dit:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql= "........
WHERE
postcode BETWEEN 1284 AND 1184
AND
postcode LIKE '%1234%'
.....";
?>
$sql= "........
WHERE
postcode BETWEEN 1284 AND 1184
AND
postcode LIKE '%1234%'
.....";
?>
Ten eerste staan de getallen bij BETWEEN in de verkeerde volgorde. Dat moet van laag naar hoog zijn. (Daar was laatst een topic over en daar was dit het probleem).
Ten tweede zal die LIKE alleen postcode 1234 selecteren want 1233 en/of 1235 passen niet in deze LIKE.
Conclusie: De enige waarde die er gevonden zou kunnen worden is $zoekterm zelf.