Я пытаюсь реализовать что-то похожее на локатор магазина Google здесь, но с GPS-событиями транспортных средств, поэтому существует несколько событий на транспортное средство. Данные для этого находятся в таблице EventData.
Вот формат таблицы и некоторые примеры данных - временная метка теперь генерируется с незначительными отличиями для простоты:
deviceID|timestamp |longitude|latitude|
1 |1323777977|73.52 | 18.55 |
2 |1323777973|73.52 | 18.55 |
1 |1323777833|73.52 | 18.55 |
1 |1323778111|73.52 | 18.55 |
3 |1323777912|73.52 | 18.55 |
2 |1323777922|73.52 | 18.55 |
3 |1323777971|73.52 | 18.55 |
3 |1323777831|73.52 | 18.55 |
1 |1323777957|73.52 | 18.55 |
1 |1323778111|73.52 | 18.55 |
Вот запрос:
SELECT DISTINCT(`EventData`.`deviceID`),`EventData`.`timestamp`,`EventData`.`latitude`, `EventData`.`longitude`,
(6371 * acos( cos( radians(18.52) ) * cos( radians( `EventData`.`latitude` ) ) * cos( radians( `EventData`.`longitude` ) - radians(73.58) ) + sin( radians(18.52) ) * sin( radians( `EventData`.`latitude` ) ) ) )
AS distance FROM `EventData` AS `EventData`
WHERE `EventData`.`timestamp` >= UNIX_TIMESTAMP(date_sub(now(), INTERVAL 6 day)) AND `EventData`.`timestamp` <= UNIX_TIMESTAMP(now()) AND `EventData`.`accountID` = 'sysadmin'
GROUP BY `EventData`.`deviceID`
HAVING distance < 5
ORDER BY `EventData`.`timestamp` DESC;
То, что я пытаюсь получить, - это транспортное средство, ближайшее (менее 5 км или 10 миль) к широте / долготе 18,52, 73,58, и поскольку таких записей будет несколько, сгруппируйте их по EventData.deviceID (их уникальный идентификатор) и, наконец, упорядочение по отметке времени для получения последней записи для каждого устройства. Я использую этот раздел, так как в таблице уже есть индекс, и эта функция также значительно ускоряет ответ:
AND `EventData`.`accountID` = 'sysadmin'
Очевидно, что я делаю что-то очень неправильное, поскольку выбираются уникальные транспортные средства, но их временные метки означают, что они не являются ни самыми ранними, ни самыми последними записями. Я MySQL n00b, пожалуйста, не судите!
http://code.google.com/apis/maps/articles/phpsqlsearch.html
- это пример Google для определения местоположения магазина, но с уникальными записями магазина.