2013-02-19 4 views
0

DISTINCT으로 쿼리를 작성했지만 여전히 중복 레코드가 반환됩니다.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 `cuisine_types`.`name` 

예 : 내가 GROUP BY을 사용하는 경우 내 HAVING 위에 배치

을 나는이 값을 사용하는 경우 :

$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이면 한 행을 반환합니다. 그러나 나는 30 마일 이하의 거리를 가진 17 마일의 기록을 가지고있다.

+8

검색어에 별다른 의미가 없는데 제대로 작동하지 않습니다. –

+0

쿼리에서 그룹을 볼 수 없으며 제대로 작동하지 않습니다. – Khez

+0

죄송합니다. groupby가 최고 게시물을 확인하기 위해 뚜렷한 일없이 노력하고있었습니다. –

답변

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

트릭을 해 주셔서 감사합니다. –

관련 문제