2013-02-19 57 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