워드프레스 포스트 메타에 행을 열로 선택
워드프레스wp_postmeta
테이블에는 게시물에 대한 모든 추가 필드가 있지만 행으로 구성되어 있으므로 추가하기 쉽습니다.
그러나 이제 모든 게시물의 모든 필드에 대해 쿼리하고 싶습니다. 저는 분명히 그 필드들을 행이 아닌 열로 원합니다.
이것이 내가 실행하고 있는 쿼리입니다.
SELECT p.post_title,
m.meta_value,
m.meta_key
FROM wp_posts p
JOIN wp_postmeta m
ON p.id = m.post_id
WHERE p.id = 72697;
이렇게 하면 모든 meta_value와 각각의 meta key가 열로 제공됩니다.하지만 저는 메타 키 값을 열로 하고 메타 값을 행으로 해야 합니다.
예를들어 a.meta_key
그럴 수도 있겠지요additional_description
그리고 그것의 가치는What's up
그래서 나는 이런게 필요합니다.
SELECT p.post_title, additional_description
FROM wp_posts p
JOIN wp_postmeta m
ON p.id = m.post_id
WHERE p.id = 72697;
칼럼으로 필요합니다.저는 또한 모든 게시물이 필요하고 특정 게시물이 필요하지 않지만, 삭제할 수 있습니다.where
질문을 하지 않을 뿐입니다(게시물이 많아서 문제가 될 수 있습니다).
여기 몇 가지 샘플 데이터와 wp_postmeta table을 표시하는 방법이 있습니다.
meta_key post_id meta_key meta_value
1 5 total_related 5
2 5 updated 0
3 5 cricket 1
4 8 total_related 8
5 8 updated 1
6 8 cricket 0
wp_post table
id post_title other things I dont care about
5 This is awesome
8 This is more awesome
wp_post ID는 wp_postmeta 테이블의 post_id와 관련이 있습니다.
결과수배
post_title total_related updated cricket
This is awesome 5 0 1
This is more awesome 8 1 0
이런 건 어때요?
SELECT p.post_title, m1.meta_value as 'total_related', m2.meta_value as 'updated', m3.meta_value as 'cricket'
FROM wp_posts p
LEFT JOIN wp_postmeta m1
ON p.id = m1.post_id AND m1.meta_key = 'total_related'
LEFT JOIN wp_postmeta m2
ON p.id = m2.post_id AND m2.meta_key = 'updated'
LEFT JOIN wp_postmeta m3
ON p.id = m3.post_id AND m3.meta_key = 'cricket'
그리고 당신이 특정한 게시물을 찾고 있는 것이 아니기 때문에 당신은 이것을 할 수 있을 것입니다.
특정 정보를 조회하려면post_types
당신은 이와 같은 것을 시도할 수 있습니다.
SELECT p.post_title, m1.meta_value as 'total_related', m2.meta_value as 'updated', m3.meta_value as 'cricket'
FROM wp_posts p
LEFT JOIN wp_postmeta m1
ON p.id = m1.post_id AND m1.meta_key = 'total_related'
LEFT JOIN wp_postmeta m2
ON p.id = m2.post_id AND m2.meta_key = 'updated'
LEFT JOIN wp_postmeta m3
ON p.id = m3.post_id AND m3.meta_key = 'cricket'
WHERE p.post_type = 'my_custom_post_type';
시도해 보십시오.
select post_title ,
MAX(CASE WHEN `meta_key`='total_related' THEN meta_value END)as 'total_related',
MAX(CASE WHEN `meta_key` = 'updated' THEN meta_value END) as 'updated' ,
MAX(CASE WHEN `meta_key` = 'cricket' THEN meta_value END) as 'cricket'
FROM wp_posts p
JOIN wp_postmeta m ON p.id = m.post_id
GROUP BY p.id
몇 가지 접근법이 있습니다.
다음은 SELECT 목록에서 상관된 하위 쿼리를 사용하여 지정된 결과를 가져오는 한 가지 방법의 예입니다.
SELECT p.post_title
, ( SELECT m1.meta_value
FROM wp_post_metadata m1
WHERE m1.meta_key = 'total_related'
AND m1.post_id = p.id
ORDER BY m1.meta_key LIMIT 1
) AS `total_related`
, ( SELECT m2.meta_value
FROM wp_post_metadata m2
WHERE m2.meta_key = 'updated'
AND m2.post_id = p.id
ORDER BY m2.meta_key LIMIT 1
) AS `updated`
, ( SELECT m3.meta_value
FROM wp_post_metadata m3
WHERE m3.meta_key = 'cricket'
AND m3.post_id = p.id
ORDER BY m3.meta_key LIMIT 1
) AS `cricket`
FROM wp_posts p
WHERE p.id IN (5,8)
각각의 장점과 단점을 가지고 있는 몇 가지 다른 접근법이 있습니다.
제가 질문에 대한 댓글에서 언급한 다소 관련된 질문이 있습니다.이 질문은 몇 가지 접근법을 설명하지만 상관 관계가 있는 하위 쿼리 접근법은 생략합니다.)
동적으로 수행한 방법은 다음과 같습니다. 이 절차에서는 특정 포스트 유형에 대한 모든 포스트 메타 키에 대한 SQL 문을 구축한 다음 "pivot" 쿼리를 실행합니다.
이는 가장 빠른 쿼리가 아니며, 마이그레이션 및 데이터에 대한 심층적인 정보를 제공하는 데만 사용됩니다. 하지만 이는 효과가 있습니다.
이렇게 하면 일시적으로 concat 함수의 최대 길이가 재설정되므로 큰 SQL 문을 만들 수 있습니다.
CREATE PROCEDURE `wp_posts_pivot`(IN post_type_filter varchar(50))
BEGIN
/* allow longer concat */
declare max_len_original INT default 0;
set max_len_original = @@group_concat_max_len;
set @@group_concat_max_len=100000;
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(pm.meta_key = ''',
meta_key,
''', pm.meta_value, NULL)) AS `',
meta_key,
'`'))
INTO @sql FROM
wp_posts p
INNER JOIN
wp_postmeta AS pm ON p.id = pm.post_id
WHERE
p.post_type = post_type_filter;
SET @sql = CONCAT('SELECT p.id
, p.post_title
, ', @sql, '
FROM wp_posts p
LEFT JOIN wp_postmeta AS pm
ON p.id = pm.post_id
where p.post_type=\'',post_type_filter,'\'
GROUP BY p.id, p.post_title');
/* reset the default concat */
set @@group_concat_max_len= max_len_original;
/*
select @sql;
*/
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
그런 다음 이 호출과 같은 간단한 호출을 통해 모든 메타 값과 함께 각 '페이지' 게시 유형에 대해 하나의 행을 선택할 수 있습니다.
call wp_posts_pivot('page');
언급URL : https://stackoverflow.com/questions/24516710/select-rows-as-columns-for-wordpress-post-meta
'programing' 카테고리의 다른 글
gcc의 -m32 옵션은 언제 사용해야 합니까? (0) | 2023.09.19 |
---|---|
Oracle 'INSERT ALL'에서 중복 무시 (0) | 2023.09.19 |
엔티티 프레임워크와 함께 저장 프로시저를 호출하는 방법? (0) | 2023.09.19 |
PowerShell 프로세스의 프로세스 ID 가져오기 (0) | 2023.09.19 |
원격 서버에서 반환된 JSONP 데이터를 구문 분석하는 방법 (0) | 2023.09.19 |