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

3000で使用する$iKmと、この行も返されます。

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

だから私は2つのレコードを取得します。これをgroupbyand $iKm=30で使用すると; 何も返しません。値が3000の場合、1行を返します。しかし、私は17マイルの距離で30未満のレコードを1つ持っています。

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 に答える