[php/mysql/wordpress] dichtsbijzijnde locatie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Laatst online: 16:28
Ik ben bezig om een buddypress/wordpress plugin te maken. In de "metadata" tabel van de buddypress groepen sla ik de latidude longtitude op. Mijn doel is om elke buddypress groep die wordt aangemaakt een locatie mee te geven en elke groep op een kaart te tonen. Dit werkt.

Volgende stap: Zoeken op dischtbijzijnde groep. Stel; ik heb de groep is Amsterdam, en ik zoek op Haarlem. Voor Haarlem is geen groep aangemaakt, en de groep Amsterdam is het meest dicht bij Haarlem. Hij zou dus Amsterdam moeten geven.

De lat/lon gegevens van de ingegeven zoekopdracht worden opgevraagd bij Google Maps. Daarna wil in de (standaard) Buddypress tabel zoeken naar de dichstbijzijnde locatie.

De tabel zit er als volgt uit:
id | group_id | meta_key | meta_data

Dit wordt gevuld als:
1 | 1 | stad | Amsterdam
2 | 1 | last_activity | 12-12-2010
3 | 1 | lat | 52.1565886
4 | 1 | lon | 5.1586

Geen apart veld voor lat / lon dus.Per groep wordt deze informatie opgeslagen. In dit geval dus groep id 1.

Nou zijn er "standaard" MySQL queries, die je overal op internet kan vinden. Echter, deze gaan er vanuit dat je een aparte kolom voor latitude en longitude hebt. Ik dacht dit op te lossen om twee subselects te doen. Zie hieronder. Dit werkt echter niet.

code:
1
2
3
4
5
SELECT 
id, 
(select meta_value from kw_bp_groups_groupmeta where meta_key = 'lat') as lat, 
(select meta_value from kw_bp_groups_groupmeta where meta_key = 'lon') as lng, 
( 3959 * acos( cos( radians(52.229033) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(5.471191) ) + sin( radians(52.229033) ) * sin( radians( lat ) ) ) ) AS distance FROM kw_bp_groups_groupmeta HAVING distance < 30 ORDER BY distance LIMIT 0 , 20


Kunnen jullie mij op weg helpen? Of is er geen andere oplossing dan 'n nieuwe tabel aanmaken met de lat/lon gegevens?

Edit: Les 1: topictitel controleren voor plaatsen...Excuses.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Waarom gebruik je eigenlijk überhaupt het database in database anti-pattern? Ook voor wordpress plugins is het mogelijk om eigen database tabellen aan te maken.

De denkfout die jij maakt mbt die query is trouwens dat jij automagisch verwacht dat hij de resultaten wel op group_id bij elkaar zou zoeken. SQL is vooral record georienteerd en daarna join georienteerd. Dit maakt het heel lastig om dingen te doen waarbij de records niet in een record, maar in een kolom verspreid staan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Laatst online: 16:28
Ik kan inderdaad gewoon een nieuwe tabel aanmaken. Was eigenlijk meer benieuwd of het kon, maar goed, dat wordt dus heel lastig :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Het is op zich wel mogelijk, maar dan wordt het erg lastig en erg inefficient. De beste en netste oplossing hier is gewoon een nette tabel.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'