我有两个我正在尝试合并的SQL查询
第一个:
SELECT * FROM wp_posts
JOIN wp_postmeta on (post_id=ID)
WHERE meta_key = "packageID" and meta_value = 1
ORDER BY post_date limit 50
将wordpress wp_post表加入wp_postmeta并获取所有符合packageID = 1的帖子(我认为这可能是一种不太优雅的方式,但它有效)
第二个
SELECT * FROM wp_postmeta
JOIN wp_posts ON (meta_value=ID)
WHERE post_id = 2110
AND meta_key = '_thumbnail_id'
再次将wp_post表连接到wp_postmeta表,因此对于具有id 2110的帖子,它成功获取该帖子的缩略图。 NB 2110只是id
的一个例子在Wordpress中,缩略图是一种帖子。因此,在该示例中,构成帖子2110的文本与帖子2115相关联 - 后者是缩略图
我要做的是获取第一个查询中的列表,同时获取与每个帖子关联的缩略图
我想我需要两个连接,但我看不出怎么做(作为一个sql初学者)
注意,这将在Wordpress外部的脚本中,因此我无法使用Wordpress的内置函数
答案 0 :(得分:0)
尝试使用以下代码
SELECT * FROM wp_posts wp JOIN wp_postmeta wm on (wp.post_id=wm.ID) WHERE wp.meta_key = "packageID" and wp.meta_value = 1 ORDER BY wp.post_date limit 50;
使用正确的别名并尝试。
答案 1 :(得分:0)
尝试使用post_type列。附件的post_type为“附件”。如果需要,我可以进一步解释。
附加缩略图的帖子也位于post_parent列中。
答案 2 :(得分:0)
global $wpdb;
$query7 = "SELECT distinct wp_postmeta.meta_value, wp_postmeta.meta_key, wp_posts.ID
FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_posts.post_status = 'publish'
AND wp_postmeta.meta_key = 'packageID'
AND wp_postmeta.meta_value = 1
AND (mt1.meta_key LIKE '_thumbnail_id')
$output = $wpdb->get_results( $query7 );
多次连接同一个表时,使用不同别名的连接。
希望这有帮助。
答案 3 :(得分:0)
你可以尝试这个,如果帖子有多个缩略图你可以得到用逗号分隔的缩略图列表
SELECT
*,
(SELECT
GROUP_CONCAT(meta_value)
FROM
wp_postmeta
WHERE post_id = wp.ID
AND wpm.meta_key = "_thumbnail_id") AS `thumbnails`
FROM
wp_posts wp
JOIN wp_postmeta wpm
ON (wpm.post_id = wp.ID)
WHERE wpm.meta_key = "packageID"
AND wpm.meta_value = 1
ORDER BY wp.post_date
LIMIT 50
注意:GROUP_CONCAT对concat字符有限制,但是你 可以增加这个限制
要获得一个缩略图,您可以试试这个
SELECT
*,
(SELECT
(meta_value)
FROM
wp_postmeta
WHERE post_id = wp.ID
AND wpm.meta_key = "_thumbnail_id" LIMIT 1)
FROM
wp_posts wp
JOIN wp_postmeta wpm
ON (wpm.post_id = wp.ID)
WHERE wpm.meta_key = "packageID"
AND wpm.meta_value = 1
ORDER BY wp.post_date
LIMIT 50
答案 4 :(得分:0)
试试这个
SELECT * FROM wp_posts P1
LEFT JOIN wp_postmeta M1 ON (M1.post_id=P1.ID)
WHERE (M1.meta_key = "packageID" and M1.meta_value = 1 )
LEFT JOIN wp_postmeta M2 ON (M2.meta_key=P1.ID AND M2.meta_key = '_thumbnail_id')
LEFT JOIN wp_posts P2 ON (M2.meta_value=P2.ID)
ORDER BY P1.post_date limit 50