我有两个表:位置和列表。
地点
id
title
address
latitude
longitude
列表
id
location
info
status
SELECT locations.title,
locations.address,
( 3959 * acos( cos( radians('".$center_lat."') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('".$center_lng."') ) + sin( radians('".$center_lat."') ) * sin( radians( latitude ) ) ) ) AS distance
FROM locations
ORDER BY distance
这将按用户提供的纬度和经度按位置顺序列出位置。工作完美,但我真正想做的是..
- 每个位置列出一个“列表”,并使位置保持有序。
- 如果一个位置有多个“列表”,则它是完全随机的。
在一个 SQL 查询中完成这一切会更好吗?或者填充至少有一个“列表”的所有位置,然后使用另一个查询为该位置选择一个随机“列表”?
更新
提供创建表:
CREATE TABLE `listings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`token` varchar(4) DEFAULT NULL,
`location` varchar(45) DEFAULT NULL,
`info` varchar(45) DEFAULT NULL,
`status` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;
CREATE TABLE `locations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(45) DEFAULT NULL,
`address_street` varchar(45) DEFAULT NULL,
`addrees_city` varchar(45) DEFAULT NULL,
`address_state` varchar(45) DEFAULT NULL,
`address_zip` varchar(45) DEFAULT NULL,
`latitude` decimal(10,6) DEFAULT NULL,
`longitude` decimal(10,6) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;