2013-02-19 56 views
0

我写了一个查询与DISTINCT但我仍然得到重复记录返回。独特不能正常工作

SELECT DISTINCT 
    `cuisine_types`.`id`, 
    `cuisine_types`.`name`, 
    `cuisine_types`.`image`, 
    (
    SELECT group_concat(`tagname` separator ', ') 
    FROM `cuisine_tags` 
    WHERE `cuisine_type` = `cuisine_types`.`id` 
) AS tags, 
    (
    3959 * acos(cos(radians(" . $dLat . ")) * cos(radians(gps_lat)) * cos(radians(gps_lon) - radians(" . $dLon . ")) + sin(radians(" . $dLat . ")) * sin(radians(gps_lat))) 
) AS distance 
FROM `company` 
LEFT JOIN `cuisine_types` 
ON 
    `company`.`cuisine_type_id` = `cuisine_types`.`id` 
HAVING 
    distance < " .$dMiles 

当我尝试使用GROUP BY函数时,我的查询无法正常工作。 当我使用GROUP BY我把它放在我的上述HAVING

GROUP BY `cuisine_types`.`name` 

例子:

当我使用这些值使用它:

$dLat = '52.779716'; 
$dLon = '21.84803'; 
$iKm = '30'; 

它返回:

id = 1 
name = Snackbar 
image = 
tags = Patat, Snacks 
distance = 17.4713944772963 

当我使用$iKm与3000它返回s这一行以及:

id = 1 
name = Snackbar 
image = 
tags = Patat, Snacks 
distance = 722.407714147792 

所以我得到两个记录。 当我用groupby和$iKm = 30;它什么都不返回。如果值为3000,则返回一行。但是我有一个距离为17英里的记录,因此在30以下。

+8

我在您的查询中看不到任何明显的内容,哪些内容不正确? – 2013-02-19 17:51:25

+0

我在您的查询中看不到任何组,并且哪些工作不正常是什么意思? – Khez 2013-02-19 17:53:06

+0

对不起,我在尝试没有明显的东西,为groupby检查顶部的帖子。 – 2013-02-19 17:58:55

回答

1

这应该解决您的问题,问题是距离计算阻塞了GROUP BY函数。通过将等式放在HAVING本身中,问题似乎是固定的。对不起,我不能更详细地解释它。

SELECT 
      `cuisine_types`.`name`, 
      `cuisine_types`.`id`, 
      `cuisine_types`.`image` 
      `c`.`gps_lat` as lat, 
      `c`.`gps_lon` as lon, 
      (SELECT group_concat(`tagname` separator ', ') FROM `cuisine_tags` WHERE `cuisine_type`=`cuisine_types`.`id`) as tags FROM `company` as c LEFT JOIN `cuisine_types` ON c.`cuisine_type_id` 
= `cuisine_types`.`id` GROUP BY `cuisine_types`.`name` HAVING (3959 * acos(cos(radians(52.779716)) * cos(radians(lat)) * cos(radians(lon) - radians(21.84803)) + sin(radians(52.779716)) * sin(radians(lat)))) < 2000; 
+0

谢谢你这个伎俩 – 2013-02-19 22:30:53