结合两个SQL查询 -

时间:2014-01-13 13:04:04

标签: mysql sql wordpress

我有两个我正在尝试合并的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的内置函数

5 个答案:

答案 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