Zoeken binnen straal van woonplaats
ik ben bezig een zoekmogelijkheid te creeren waarin je kan zoeken op alle woonplaatsen binnen een straal van de opgegeven woonplaats.
het script om de berekening uit te voeren heb ik, het gaat me meer om de invoeging in de bestaande "uitgebreid zoeken" functie.
Het script hieronder is mijn huidige status, waarbij het er op lijkt dat bij opgave van een 'distance' er geen array aangemaakt wordt met alle mogelijke postcodes. Ik zie niet waar de fout zit in het script, misschien dat iemand me op het juiste pad kan zetten.
Quote:
if (!empty($_SESSION['advs']['country']))
{
if (!empty($_SESSION['advs']['distance']))
{
$z = new zipcode_class;
$zips = $z->get_zips_in_range('Eindhoven', 30, _ZIPS_SORT_BY_DISTANCE_ASC, true);
foreach ($zips as $key => $value) {
$distance[] = $value['distance'];
}
$userjoin = "LEFT JOIN " . $DBPrefix . "users u ON (u.id = au.user)";
$wher .= "(u.country = '" . $distance . "') AND ";
}
else
{
$userjoin = "LEFT JOIN " . $DBPrefix . "users u ON (u.id = au.user)";
$wher .= "(u.country = '" . $system->cleanvars($_SESSION['advs']['country']) . "') AND ";
}
}
{
if (!empty($_SESSION['advs']['distance']))
{
$z = new zipcode_class;
$zips = $z->get_zips_in_range('Eindhoven', 30, _ZIPS_SORT_BY_DISTANCE_ASC, true);
foreach ($zips as $key => $value) {
$distance[] = $value['distance'];
}
$userjoin = "LEFT JOIN " . $DBPrefix . "users u ON (u.id = au.user)";
$wher .= "(u.country = '" . $distance . "') AND ";
}
else
{
$userjoin = "LEFT JOIN " . $DBPrefix . "users u ON (u.id = au.user)";
$wher .= "(u.country = '" . $system->cleanvars($_SESSION['advs']['country']) . "') AND ";
}
}
echo je query eens, denk dat je het dan wel ziet :)
Als je merkt dat query's niet doen wat je verwacht, kan je best $sql eens echo'en en in phpMyAdmin copy pasten.
Kris Peeters op 07/02/2011 17:52:48:
Als je merkt dat query's niet doen wat je verwacht, kan je best $sql eens echo'en en in phpMyAdmin copy pasten.
Nee, want phpmyadmin vernaggelt je sql statements, dus om daarin je query te controleren komt je nog geen stap verder.
Als ik de query echo krijg ik alleen het woord "Array".
Dan echo je waarschijnlijk het resultaat en niet de sql van de query.
Daarbij moet gezegd dat deze query bestaat uit meerdere versies, zoals min & max bedrag, zoeknaam, etc.
Je moet de echo doen voordat je mysql_query(...) doet. Dan krijg je als het goed is een string met de SQL. In die string staat waarschijnlijk in de laatste WHERE " AND ", wat niet goed is. Of er is iets anders fout.
Hierboven bouw je een array op die je vervolgens hier...
$wher .= "(u.country = '" . $distance . "') AND ";
... in je query stopt. Je zegt hier dus (u.country = 'ARRAY')
Dat gaat niet werken lijkt me zo.
het query resultaat!
Toevoeging op 09/02/2011 12:31:55:
he Ozzie, wat een vooruitziende blik, hoe herstel ik dit?
Iig ontzettend bedankt voor de hulp!
wat moet er komen te staan op de plek waar nu Array staat?
Toevoeging op 09/02/2011 13:06:42:
Ik heb ook al geprobeerd:
$distance[] = $value [$zips];
$distance[] = $value [$z];
maar zelfde resultaat, de array wordt volgens mij wel aangemaakt, maar ik krijg hem niet aan de juiste variabele gehangen en getransporteerd naar mijn query.
Zet de complete query eens neer zoals ie volgens jou eruit zou moeten zien.
Ik ga er mee aan de haal, als ik er niet uit kom meldt ik me weer. Zo zie je maar dat het stellen van de juiste vragen het meest leerzaam is.
Thanks Ozzie.
you're welcome ;-)
Ik heb het nu zo ver dat ik 1 waarde krijg in de query. As ik de volgende zoekopdracht geef (zoeken in 10 kilometer rond Eindhoven:
if (!empty($_SESSION['advs']['distance']))
{
$z = new zipcode_class;
$zips = $z->get_zips_in_range('Eindhoven', 10, _ZIPS_SORT_BY_DISTANCE_ASC, true);
foreach ($zips as $key => $value) {
$woonplaats = $key;
}
$userjoin = "LEFT JOIN " . $DBPrefix . "users u ON (u.id = au.user)";
$wher .= "(u.country = '" . $woonplaats . "') AND ";
}
Krijg ik het volgende resultaat in de query:
SELECT au.* FROM WEBID_auctions au LEFT JOIN WEBID_users u ON (u.id = au.user) WHERE au.suspended = 0 AND (au.closed = '0') AND (u.country = 'Knegsel') AND au.starts <= 1297341101 ORDER BY au.ends ASC LIMIT 0, 20
Hij haalt dus maar 1 waarde uit de database ipv een hele array. Het script om de array te maken is OK. Deze heb ik afzonderlijk van de zoekfunctie getest en geeft alle woonplaatsen binnen een straal van 10 km.
Het probleem zit hem in het doorgeven van de gehele array naar de query.
HELP!!!!!!!
wat zit er in $zips? Kun je die vardumpen?
array(112) { ["Eindhoven"]=> float(0) ["Gennep"]=> float(4) ["Veldhoven"]=> float(5) ["0Riel"]=> float(5) ["Nuenen"]=> float(6) ["0Best"]=> float(7) ["Waalre"]=> float(7) ["Wilhelminadorp"]=> float(7) ["Geldrop"]=> float(7) ["Budel-Schoot"]=> float(8) ["Breugel"]=> float(8) ["00Son"]=> float(8) ["Wintelre"]=> float(9) ["Knegsel"]=> float(10) ["Heeze"]=> float(10) ["Mierlo"]=> float(10) ["Steensel"]=> float(11) enz.
En wat moet er met die woonplaatsen in de query gebeuren?
Die moeten gekoppeld worden aan veilingen, dus denk aan uitgebreid zoeken op Marktplaats.nl. Alle veilingen in een straal van 10 km rondom Eindhoven.
Maar hoe moet je query er uitzien... geef eens een voorbeeld van een query met die woonplaatsen erin.