Zoeken binnen straal van woonplaats
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 = 'Eindhoven','Knegsel','Best',enz.) AND au.starts <= 1297341101 ORDER BY au.ends ASC LIMIT 0, 20
De array bestaat en is juist (is getest). De vraag is hoe ik hem in een zodanige variabele krijg dat hij overgenomen wordt in de query. Nu krijg ik maar 1 enkele waarde.
Stephan Hendrikx op 10/02/2011 14:46:09:
De array bestaat en is juist (is getest). De vraag is hoe ik hem in een zodanige variabele krijg dat hij overgenomen wordt in de query. Nu krijg ik maar 1 enkele waarde.
Dit gaat wel lukken. Echter, weet je zeker dat dit zo klopt? u.country = 'Eindhoven','Knegsel','Best' kun je dat zo achter elkaar zetten?
Zoals ik er tegenaan kijk, gaat hij alle waarden af die opgegeven zijn in de query om te kijken of er een match is met de andere tabel. Zo ja, dan neemt hij die waarde mee als output??????? (Hoop ik.)
oke, dan moet je dat eerst ff uitzoeken want volgens mij gaat dit u.country = 'Eindhoven','Knegsel','Best' zo niet werken.
Gewijzigd op 10/02/2011 15:04:43 door Arjan -
Als het niet werkt wil ik dat wel graag zien in mijn output (leereffect). Kan je me wel vertellen hoe ik de array in de query krijg. Of hij nu werkt of niet?
Ozzie PHP op 10/02/2011 15:01:48:
oke, dan moet je dat eerst ff uitzoeken want volgens mij gaat dit u.country = 'Eindhoven','Knegsel','Best' zo niet werken.
Nee, gaat niet werken zo.
Je zoekt waarschijnlijk u.country IN ('Eindhoven','Knegsel','Best')
IN is de beste optie in dit geval, geen OR ;)
Niels Kieviet op 10/02/2011 15:09:06:
Arjan,
IN is de beste optie in dit geval, geen OR ;)
IN is de beste optie in dit geval, geen OR ;)
Ja dat weet ik, daarom zeg ik het ook. Maar ik heb ergens gelezen (weet niet meer waar) dat IN in sommige gevallen trager is dan afzonderlijke OR's.
En met veel data is een UNION nog sneller omdat deze goed gebruik kan maken van indexes, in tegenstelling tot IN of OR.
Gewijzigd op 10/02/2011 15:26:40 door Arjan -
$wher .= "u.country IN '" . $woonplaats . "' AND ";
werkt niet. Hier krijg ik een foutmelding op.
Toevoeging op 10/02/2011 15:53:33:
Sorry vergeet deze maar, haakjes toevoegen........
Toevoeging op 10/02/2011 15:54:54:
He Ozzie,
als ik je code toevoeg aan het script krijg ik dit als output. Waar zit nog een probleem nu?
{
$z = new zipcode_class;
$zips = $z->get_zips_in_range($system->cleanvars($_SESSION['advs']['country']), $system->cleanvars($_SESSION['advs']['distance']), _ZIPS_SORT_BY_DISTANCE_ASC, true);
$woonplaats = array();
foreach ($zips as $city) {
$woonplaats[] = $city;
}
$woonplaats = explode($woonplaats, ',');
$userjoin = "LEFT JOIN " . $DBPrefix . "users u ON (u.id = au.user)";
$wher .= "u.country IN ('" . $woonplaats . "') AND ";
}
Output 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 IN ('Array') AND au.starts <= 1297349563 ORDER BY au.ends ASC LIMIT 0, 20
$woonplaats = explode($woonplaats, ',');
moet zijn
$woonplaats = implode($woonplaats, ',');
output 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 IN ('Eindhoven,Gennep,0Riel,Veldhoven,Nuenen,Waalre,Wilhelminadorp,0Best,Geldrop,Budel-Schoot,00Son,Breugel,Wintelre,Knegsel') AND au.starts <= 1297350176 ORDER BY au.ends ASC LIMIT 0, 20
Dit houdt niet in dat het geheel werkt maar ik ben al weer een heel eind. Volgens mij moet ik nog overal haakjes voor en achter krijgen.
Je moet elke plaats voorzien van enkele quotes.
$woonplaats = '\''.implode($woonplaats, '\',\'').'\'';
Ozzie PHP op 10/02/2011 16:23:16:
$woonplaats = '\''.implode($woonplaats, '\',\'').'\'';
Iets overzichtelijker:
$woonplaats = "'".implode($woonplaats, "','")."'";
En dan: u.country IN (".$woonplaats.")
Let wel op user input in verband met sql injecties! Misschien nog even de array items door mysql_real_escape_string halen.
He allemaal, hier heb ik zeker een half jaar op "gestudeerd" en het nu werkt het eindelijk. Dit is waarom programmeren zo leuk is.
De site waar dit gebruikt gaat worden is www.deveilingspeelplaats.nl, neem eens een kijkje, wat advies links en rechts kan geen kwaad.
Thanks everyone!!!!!!!!