2014-07-13 7 views
0

K2 extra_fields을 사용하여 일부 계산을 수행하고 SELECT 문으로 결과를 반환하려면 4 개의 매개 변수를 허용하는 함수가 필요합니다.K2 extra_fields에 액세스하기 위해 mySQL 함수를 작성하는 방법

2 점 사이의 거리를 계산하는 함수가 필요합니다. 첫 번째 점의 좌표는 항목의 extra_fields에 있습니다. 두 번째 점의 좌표는 PHP 스크립트에서 수동으로 지정됩니다.

extra_fields가 포함되어

ID [1] 번호 [2] 좌표 (위도 및 경도)이다
[{"id":"1","value":"40.111"},{"id":"2","value":"20.222"}] 

. 나는 거리 계산 알고리즘을 찾고 있지 않다

SELECT id, title, **FUNCTION_GOES_HERE** AS 'distance' 
FROM k2_items; 

: 같은

선택 문이 보일 것입니다. 문제는 extra_fields 필드에서 좌표를 추출하는 방법입니다. 아이디어가 있으십니까?

+0

PHP 함수 [json_decode] (http://www.php.net/manual/en/function.json-decode.php) 사용은 어떻게됩니까? – VMai

+0

나는 그것을 시도했지만 데이터베이스에서 직접 거리를 받고 싶습니다. 그래서 나중에 필요없는 행을 필터링 할 수 있습니다. – johnnaras

+0

MySQL은 현재 알고있는 json 지원이 없기 때문에 json 형식으로 데이터를 저장하는 것은 좋지 않습니다. 그래서 당신은 두 개의 개별 필드, 즉'lat'와'long'에 저장하는 것이 좋습니다. 디자인을 변경할 수 없다면이 특수 json 문자열에서 값을 추출하는 저장 함수를 작성하는 것이 가장 좋습니다. – VMai

답변

0

테이블 디자인을 변경할 수 없기 때문에 지루한 문자열 구문 분석을해야합니다. 여기에 예제 :

SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX(extra_fields, '"value":"', -2), '"', 1) as latitude, 
    SUBSTRING_INDEX(SUBSTRING_INDEX(extra_fields, '"value":"', -1), '"', 1) as longitude 
FROM k2_items; 

DEMO

설명 :이 값에 "두 번 :

[{"id":"1","value":"40.111"},{"id":"2","value":"20.222"}] 
     ^first time    ^second time 

SUBSTRING_INDEX(extra_fields, '"value":"', -2 

하는 줄 것이다

우리는 문자열"값을 "발견 우리가 샘플 데이터와 함께 두 번째 마지막 발생 후 시작 부분 문자열 우리의 바늘의 ence, 여기 첫 번째 occurence :

40.111"},{"id":"2","value":"20.222"}] 

위도에 대해서는 다음 큰 따옴표까지 부분 문자열이 필요합니다. 그것은 간단합니다 : SUBSTRING_INDEX(haystack, needle, 1) haystack과 바늘처럼 큰 따옴표로 첫 표현. 우리는 경도를 얻을 수 있습니다 같은 논리에 의해

40.111 

:

SUBSTRING_INDEX(SUBSTRING_INDEX(extra_fields, '"value":"', -2), '"', 1) 

은 우리에게 원하는 결과를 제공합니다.