2011-04-07 1 views
1

phpMyAdmin에서 WordPress의 맞춤 메타 필드로 작업하고 있습니다.SQL을 실행하는 방법 여러 메타 키를 열로, 해당 값을 행으로 실행 하시겠습니까?

3 개의 필드 (주소, 위도, 경도)에 대한 맞춤 메타가 있다고 가정하고 SQL 쿼리를 실행하여이 3 개의 열과 그 값을 아래 행에 표시하고 싶습니다.

난 단지 표시하는 열 중 하나 얻는 방법을 알아낼 수 있으며,이 실행하여 데이터의 :

SELECT DISTINCT wp_postmeta.meta_value AS address 
FROM wp_postmeta, wp_posts 
WHERE post_type = ‘dealers’ 
AND wp_postmeta.meta_key = ‘_dealer_address’ 

누군가가 쿼리를 실행하는 방법에 대한 방향으로 날 지점 수하는 3를 포함하는 방법을 열? 나는 사용자 정의 포스트 유형 (딜러)을 가지고 있기 때문에 위도와 경도에 대한 사용자 정의 METABOX를 사용 http://code.google.com/apis/maps/articles/phpsqlsearch_v3.html#outputxml

: 내가 할 노력하고있어

이있는 테이블의 설정을 모방이다.

당신의 SQL 쿼리는 phpMyAdmin에서 정밀하게 테스트되었고 다른 수동으로 생성 된 테스트 딜러 테이블과 동일하게 보였습니다. 그러나 PHP에서 google maps 예제 쿼리를 대체하려고 시도했을 때 아무런 의미가 없었습니다.

당신이 생각하는 쿼리가 너무 복잡합니까?

는 워드 프레스 사용자 정의 게시물을 사용하지 않고 작동 테스트 쿼리입니다 :

$query = sprintf("SELECT address, name, lat, lng, (3959 * acos(cos(radians('%s')) * cos(radians(lat)) * cos(radians(lng) - radians('%s')) + sin(radians('%s')) * sin(radians(lat)))) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20", 
+0

일반 참고 사항 : DISTINCT에서 멀리 떨어져 있습니다! 무서워. 아프다. 도움이 안되네. 중복이 있거나 집계하려는 경우 GROUP BY를 사용하십시오. DISTINCT는 결코 도움이되지 않으며, 초보자에게 항상 혼란스럽고 예상 한 결과를 거의 반환하지 않습니다. –

+0

[this one] (http://stackoverflow.com/questions/5196194/selecting-distinct-values-for-multiple-columns)와 같은 질문을하고 있습니까? 링크 된 하나는 다른 RDBMS를위한 것이지만, 현재 나는 당신이 무엇인지 확인하려고 노력하고 있습니다. –

+0

내가하고 싶은 일을 더 분명하게하기 위해 내 게시물을 업데이트했습니다. Andriy, 예, 그렇습니다. 그러나 누군가 "서버가 아닌 테이블을 표시하는 것이 응용 프로그램의 작업입니다"라고 말한 것처럼 말입니다. 원래 테이블이 보이지 않게하려고하는 것 같습니다. – Joe

답변

2

확실히 별개의 장소에 머물러 있어야합니다. 시간의 99 %는 스키마 또는 스키마에 대한 이해를 바탕으로 무언가 잘못되었다는 표시입니다.

Cheluis의 제안은 위도/경도와 주소를 연결하지 않을 수도 있습니다.

저는 게임을 할 워드 프레스가 없습니다. 기본 키 (예 : post_id)가 있기를 바랍니다. 원래 예제에서 두 테이블을 함께 사용하는 데이 테이블을 사용하지 않으므로 아마도 고유 한 테이블을 사용하고있는 것입니다.

이 ID가있는 경우 wp_postmeta 테이블에 여러 번 가입 할 수 있습니다 (예 :

SELECT meta1.meta_value AS address, meta2.meta_value as latitude, meta3.meta_value as longitude 
FROM wp_posts posts, wp_postmeta meta1, wp_postmeta meta2, wp_postmeta meta3 
WHERE posts.post_id = meta1.post_id 
AND posts.post_type = ‘dealers’ 
AND meta1.meta_key = ‘_dealer_address’ 
AND posts.post_id = meta2.post_id 
AND posts.post_type = ‘dealers’ 
AND meta1.meta_key = ‘_dealer_latitude’ 
AND posts.post_id = meta3.post_id 
AND posts.post_type = ‘dealers’ 
AND meta1.meta_key = ‘_dealer_longitude’ 

여기에는 각 딜러가 세 가지 특성을 모두 가지고 있다고 가정합니다. 그렇지 않다면 외부 조인으로 전환해야합니다. 그러면 외부 조인으로 인해 쿼리가 더 추해집니다.

희망이 있습니다.

0

내가 워드 프레스에 익숙하지 않은 나는, 나는 당신이 UNION ALL clausule를 사용할 수있는 것 같아요. 나는 그것이 최선의 해결책인지는 모르지만 그것이 작동하지 않는다고 생각한다. 다음과 같음 :

SELECT DISTINCT wp_postmeta.meta_value AS address, null as latitude, null as longitude 
FROM wp_postmeta, wp_posts 
WHERE post_type = ‘dealers’ 
AND wp_postmeta.meta_key = ‘_dealer_address’ 
Union All 

SELECT null as address, distinct(second_value) as latitude, null as longitude 
FROM wp_postmeta, wp_posts 
WHERE post_type = ‘dealers’ 
AND wp_postmeta.meta_key = ‘_dealer_latitude’ 

Union all 

SELECT null as address, null as latitude, distinct(third_value) as longitude 
FROM wp_postmeta, wp_posts 
WHERE post_type = ‘dealers’ 
AND wp_postmeta.meta_key = ‘_dealer_longitude’ 

또는 이와 비슷한 내용. 모든 조합에 올바른 가치를 부여하십시오.

관련 문제