2014-11-11 4 views
0

특정 지점 주위의 거리를 찾고 있습니다.laravel에 대한 sql 쿼리의 구문 오류

위와 같은 항목은 내 DB에 위도와 경도가 있습니다.

지정된 반경 내에서 모든 결과를 얻고 싶습니다.

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'long) - radians(?)) + sin(radians(?)) * ' at line 4 (SQL: select *, (6371 * acos(cos(radians(51,3)) * cos(radians(lat)) * cos(radians(long) - radians(4,3)) + sin(radians(51,3)) * sin(radians(lat)) )) AS distance from hamsters having distance < 5 order by distance asc)

누구나이 문제를 해결하는 방법 :

$lat = '51,3'; 
    $long = '4,3'; 
    $radius = '5'; 

    $hamsters = Hamster::select(
      DB::raw("*, 
         (6371 * acos(cos(radians(?)) * 
          cos(radians(lat)) 
          * cos(radians(long) - radians(?) 
          ) + sin(radians(?)) * 
          sin(radians(lat))) 
         ) AS distance")) 
      ->having("distance", "<", "?") 
      ->orderBy("distance") 
      ->setBindings([$lat, $long, $lat, $radius]) 
      ->get(); 

이 지금은 나에게 오류를 제공합니다

이 내가 그것을 얻을 어떻게?

+0

왜'-> get()'대신'-> toSql()'을 사용하지 않고 echo하고 생성 된 쿼리를 봅니다. – Latheesan

답변

2

긴 당신은 해결 방법으로 같은 이름을 공유하는 라벨 주위 역 따옴표를 (`)를 사용해야 할 것 MySQL의 source

에서 예약 된 키워드입니다.