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 一起使用时,它也会返回这一行:

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

所以我得到了两条记录。当我将它与 groupby 和$iKm= 30 一起使用时;它什么也不返回。值为 3000 它返回一行。但我有一个距离为 17 英里的记录,因此低于 30。

4

1 回答 1

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;
于 2013-02-19T22:23:47.793 回答