查询

时间:2015-10-22 12:19:25

标签: mysql sql

我的桌子上有多个索引。其中两个索引与成员的纬度和经度有关,用于计算成员之间的距离。

问题是,在计算成员之间的距离之后,我需要通过其他条件过滤结果集,即

我首先想要选择所有居住在5英里范围内的成员。

根据该结果,我想按照符合其他条件的成员过滤结果

我不确定这是否可行,并且非常欢迎就进行此查询的最佳方式提供建议。

我得到了用于计算here:

成员之间距离的公式

下面是我的查询。

SELECT *
           FROM (
             SELECT 
                u.qualityOfPictures,u.id,
                st.statement,
                ph.thumbsize
            ,
               3956 * ACOS(COS(RADIANS('51.5247725')) * COS(RADIANS(`latitude`)) * COS(RADIANS('-0.13342680000005203') - RADIANS(`longitude`)) + SIN(RADIANS('51.5247725')) * SIN(RADIANS(`latitude`))) AS `distance`
             FROM user u
             LEFT OUTER JOIN
                 members_statement st
                   ON 
                       u.id = st.id
                   LEFT OUTER JOIN
                       list_photos_uploaded_by_members ph
                   ON 
                       u.id = ph.id
             WHERE
               `latitude` 
                 BETWEEN '51.5247725' - ('5' / 69) 
                 AND '51.5247725' + ('5' / 69)
               AND `longitude` 
                 BETWEEN '-0.13342680000005203' - ('5' / (69 * COS(RADIANS('51.5247725')))) 
                 AND '-0.13342680000005203' + ('5' / (69* COS(RADIANS('51.5247725'))))
                AND 
                u.live = 1 
            AND 
                u.membershipType =1
            AND jobId IN (2,4,1)

           ) r
           WHERE `distance` < '5'

           ORDER BY `distance` ASC

这是我enter image description here时的解释声明 这是SQLfiddle

中的查询

当我取出其他条件并留下查询距离时,这是解释性说明。

这是SQLFiddle

中的查询

enter image description here

这些是表格:

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `membershipType` smallint(6) DEFAULT NULL,  
  `qualityOfPictures` smallint(6) DEFAULT NULL,   
  `city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
  `latitude` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `longitude` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `live` tinyint(1) NOT NULL, 
  `jobId` int(11) DEFAULT NULL,

  PRIMARY KEY (`id`),
  KEY `quick_search` (`live`,`membershipType`,`jobId`,`city`(5)),
  KEY `latitude` (`latitude`),
  KEY `longitude` (`longitude`)
); 

成员声明表

CREATE TABLE IF NOT EXISTS `members_statement` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `statement` varchar(2000) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)

);

CREATE TABLE IF NOT EXISTS `list_photos_uploaded_by_members` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `thumbsize` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,

  PRIMARY KEY (`id`)
) ;

0 个答案:

没有答案