Zoeken binnen straal van woonplaats

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Stephan Hendrikx

Stephan Hendrikx

10/02/2011 14:46:09
Quote Anchor link
Zoals hierboven maar dan met een veelvoud aan woonplaatsen, zoiets als:

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.
 
PHP hulp

PHP hulp

30/11/2024 11:12:56
 
Ozzie PHP

Ozzie PHP

10/02/2011 14:49:23
Quote Anchor link
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?
 
Stephan Hendrikx

Stephan Hendrikx

10/02/2011 14:56:01
Quote Anchor link
Haha, nu heb je me. Weet ik nl niet. Hier houdt mijn kennis op over PHP Mysql.

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.)
 
Ozzie PHP

Ozzie PHP

10/02/2011 15:01:48
Quote Anchor link
oke, dan moet je dat eerst ff uitzoeken want volgens mij gaat dit u.country = 'Eindhoven','Knegsel','Best' zo niet werken.
 
Arjan -

Arjan -

10/02/2011 15:03:33
Quote Anchor link
Gebruik u.country IN ('eindhoven', etc.) Of gebruik afzonderlijke OR statements, want dit gaat niet werken.
Gewijzigd op 10/02/2011 15:04:43 door Arjan -
 
Stephan Hendrikx

Stephan Hendrikx

10/02/2011 15:04:36
Quote Anchor link
Ho Ozzie, Laat me nu niet verdrinken aub.

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?
 
- SanThe -

- SanThe -

10/02/2011 15:06:42
Quote Anchor link
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')
 
Niels K

Niels K

10/02/2011 15:09:06
Quote Anchor link
Arjan,

IN is de beste optie in dit geval, geen OR ;)
 
Ozzie PHP

Ozzie PHP

10/02/2011 15:12:25
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$woonplaats
= array();
foreach ($zips as $city) {
  $woonplaats[] = $city;
}

$woonplaats = explode($woonplaats, ',');
?>
 
Arjan -

Arjan -

10/02/2011 15:12:46
Quote Anchor link
Niels Kieviet op 10/02/2011 15:09:06:
Arjan,

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 -
 
Stephan Hendrikx

Stephan Hendrikx

10/02/2011 15:50:27
Quote Anchor link
Ok. Hoe sleutel ik de IN dan in de query:

$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
 
Ozzie PHP

Ozzie PHP

10/02/2011 15:57:41
Quote Anchor link
pardon...

$woonplaats = explode($woonplaats, ',');

moet zijn

$woonplaats = implode($woonplaats, ',');
 
Stephan Hendrikx

Stephan Hendrikx

10/02/2011 16:04:45
Quote Anchor link
Thanks allemaal (Ozzie in het bijzonder).

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.
 
Arjan -

Arjan -

10/02/2011 16:18:18
Quote Anchor link
Je moet elke plaats voorzien van enkele quotes.
 
Ozzie PHP

Ozzie PHP

10/02/2011 16:23:16
Quote Anchor link
$woonplaats = '\''.implode($woonplaats, '\',\'').'\'';
 
Arjan -

Arjan -

10/02/2011 17:25:00
Quote Anchor link
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.
 
Stephan Hendrikx

Stephan Hendrikx

10/02/2011 19:44:32
Quote Anchor link
Eureka!

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!!!!!!!!
 

Pagina: « vorige 1 2



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.