2017-12-04 3 views
1

WordPress는 게시물과 게시물의 추천 이미지를 모두 별도의 게시물로 간주하므로 게시물 및 게시물의 이미지 URL을 같은 행에 넣는 SELECT 쿼리를 만들 수 없게됩니다. 다음과 같이하십시오 :post_id 및 기능 이미지 URL을 가져 오는 MySQL 쿼리

post_id imageURL 
100  [URL] 

어떻게 공통 값을 가진 열이없는 MySQL 테이블에서 두 행을 병합합니까? 한 열의 값은 다른 열의 값과 연관됩니다.

meta_id post_id meta_key   meta_value 
100  250  _thumbnail_id  101 
101  255  _wp_attached_file [URL] 

가 ...이

post_id imageURL 
100  [URL] 

워드 프레스 같은 결과를 얻을 것은이 질문에이 사이트에 대답 한 이후 그것을 데이터베이스 구조를 변경 한 것으로 보인다.

"Group by"을 사용할 수없는 경우 한 행의 값을 다른 행에 표시한다는 MySQL의 원칙을 이해하려고합니다.

몇 시간 후 동영상을 보면서 시행 착오를보고 답변을 읽으면이 문제는 해결할 수있는 방법의 절반을 차지하지만 게시물 ID 또는 이미지 URL은 항상 누락됩니다. 두 개의 행을 병합하여 이미지 URL로 게시물을 통합 할 수 없습니다.

SELECT * FROM `wp_postmeta` 
INNER JOIN wp_posts on wp_posts.id = wp_postmeta.post_id 
WHERE wp_postmeta.meta_key = "_wp_attached_file" 
ORDER BY `wp_postmeta`.`post_id` DESC 

도와주세요. 이를 달성하기위한 간단한 구문이있을 수 있습니다. 실종되었습니다. 쿼리는 WP API를 통해 제공되므로 WordPress에서 사용할 수있는 함수가 아닌 원시 SQL 쿼리를 사용합니다.

+0

'wp_postmeta' 테이블 만 보았습니다. 'wp_posts' 테이블은 무엇입니까? 'meta_id'를'post_id'로 선택하고 있습니까? – aaron

+0

좋은 질문 @aaron. wp_posts 테이블에는 WordPress 페이지와 관련된 모든 이미지가 있지만, 알 수있는 한 wp_posts 테이블은 게시물의 주요 이미지 (주 이미지)를 식별 할 수있는 방법을 제공하지 않습니다. 이미지가 본문에 포함되어 있는지 또는 주요 "추천"이미지인지 여부에 관계없이 모든 관련 이미지 (게시물을 고려함)를 나열합니다. 두 번째 질문에 손가락을 대고 생각합니다. 아래 raunak-gupta에 대한 제 응답을보십시오. – rikuwolf

+0

귀하의 회신을 보지 못했습니다. – aaron

답변

0

당신은 post_idmeta_value의 값을 기준으로 데이터를 가져 오기 위해 노력하고있다, 그래서 이것은 샘플이 MySQL의 쿼리를이 도움이

SELECT p.id AS post_id, pm2.meta_value AS URL 
FROM `wp_posts` AS p 
INNER JOIN `wp_postmeta` AS pm1 ON p.id = pm1.post_id 
INNER JOIN `wp_postmeta` AS pm2 ON pm1.meta_value = pm2.post_id 
AND pm2.meta_key = '_wp_attached_file' 
AND pm1.meta_key = '_thumbnail_id' 
ORDER BY p.id DESC; 

희망하고있다 여기에

Self JOIN를 사용함으로써 달성 될 수있다!

+0

감사합니다 Raunak 굽타. 저건 완벽 해. 예, 문제가 해결되었습니다. 필자가 놓친 SQL 쿼리 개념은 자체 조인이었다. 실용적인 문제는이 쿼리로 멋지게 해결됩니다. – rikuwolf

+0

@rikuwolf : 그것이 당신을 도왔다 고 기쁩니다. 귀하의 질문에 대답한다면 제 대답을 수락하는 것을 잊지 마십시오. [누군가 내 질문에 대답하면 어떻게해야합니까?] (http://stackoverflow.com/help/someone-answers)를 참조하십시오. –

+0

아, 네. 처음 대답을 얻습니다. 이제 받아 들였습니다. 다시 한 번 감사드립니다! – rikuwolf

0

답변은 Raunak Gupta에서 나왔습니다. Raunak 덕분입니다. 여기 그것을 해결 한 코드가 있습니다.

SELECT p.id AS post_id, p.post_title, concat('https://www.ourdomain.com','/wp-content/uploads/',pm2.meta_value) AS URL 
FROM `wp_posts` AS p 
INNER JOIN `wp_postmeta` AS pm1 ON p.id = pm1.post_id 
INNER JOIN `wp_postmeta` AS pm2 ON pm1.meta_value = pm2.post_id 
AND pm2.meta_key = '_wp_attached_file' 
AND pm1.meta_key = '_thumbnail_id' 
ORDER BY p.id DESC 

이 MySQL 쿼리를 만드는 데 필요한 핵심 원칙은 자체 조인입니다.

관련 문제