2014-05-25 6 views
1

한 필드 DB 쿼리에서 폭발 또는 분할 값은 URL의 이러한 모습이 표시됩니다(PHP/MySQL을) 내 데이터베이스 테이블 (심볼)에서

+----------+-----------------+-------------+ 
| State-ID | PostURL   |  Article | 
+----------+-----------------+-------------+ 
| us-az | flag   | (text)  | 
| us-az | flower   | (text)  | 
| us-az | flower2   | (text)  | 
| us-az | bird   | (text)  | 
| us-fl | flag   | (text)  | 
+----------+-----------------+-------------+ 

그래서 내 데이터베이스 쿼리는이 두 테이블을 결합해야합니다. 깃발, 꽃, 꽃 2 등의 값을 가진 첫 번째 테이블 (심볼)에 새 필드를 추가하기 만하면됩니다.

효과가 있지만 다소 번거롭기 때문에 테이블을 간소화하고 싶습니다. 그래서 Symbols.URL의 각 값의 두 번째 세그먼트에있는 테이블을 간단히 조인 할 수 있다는 것을 알았습니다.

LEFT JOIN articles ART ON ART.ID = Sym.IDArea AND ART.PostURL = Sym.DesigGen 

나는이로 변경하려면 :

LEFT JOIN gs_articles_world_usa ART ON ART.ID = GS.IDArea AND ART.PostURL = [2nd segment in value from field Sym.URL] 

그래서 값을 URL의 플로리다/꽃과 플로리다에 대한 그 두 번째 세그먼트에 대한

나의 현재 가입 절은 다음과 같이 보입니다/flower2는 flower2입니다.

나는이 값을 분리하기 위해 Explode를 사용하는 방법을 알고 있습니다. 쿼리에서 값을 추출한 후. 그러나 초기 쿼리에서 이러한 값을 분리 할 수있는 방법이 있습니까? 즉, 쿼리 자체 내에서 Explode 또는 다른 함수를 사용할 수 있습니까?

답변

1

LOCATE을 사용하여 슬래시의 위치를 ​​찾고 SUBSTR을 사용하여 슬래시 위치 다음에 문자열을자를 수 있습니다.

SUBSTR(Sym.URL, LOCATE('/', Sym.URL) + 1) 

LOCATE은 찾고있는 문자열이 처음 나타나는 위치를 나타냅니다. 위 코드는 항상 Sym.URL에 슬래시가 1 개만있는 경우에만 작동합니다.

1

MySQL에서 이것을 수행 할 원래 방법은 없지만 분명히 as this blog describes 자신의 SPLIT_STR 함수를 만들 수 있습니다.

먼저 DB 사용자는 기능을 만들려면 INSERT 권한이 있어야합니다. 다음 쿼리로이 프로그램을 실행하여 함수를 만들 :

CREATE FUNCTION SPLIT_STR(
    x VARCHAR(255), 
    delim VARCHAR(12), 
    pos INT 
) 
RETURNS VARCHAR(255) 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), 
     LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), 
     delim, ''); 

그는이 구문을 사용하여 기능을 사용 &에 액세스 할 수 있습니다 완료되면 : 그래서 당신의 사용

SELECT SPLIT_STR(string, delimiter, position); 

예를-과를 보지 않고 큰 MySQL의 쿼리 아마도이 같은 작동합니다 :

SELECT SPLIT_STR(Sym.URL, '/', 2) as Split_Sym_URL from [table name]; 

Split_Sym_URL 내 이름은 내 선택입니다. 다른 작품으로 자유롭게 변경하십시오. 그리고 [table name]은 테이블 이름이 무엇이든간에 있어야합니다.

그런 다음 당신이 사용할 수있는 당신의 JOINSplit_Sym_URL 같은 :

LEFT JOIN gs_articles_world_usa ART ON ART.ID = GS.IDArea AND ART.PostURL = Split_Sym_URL 
관련 문제