2014-01-13 244 views
0

我已經有這我想結合兩個SQL查詢合併兩個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並得到所有的職位會議與包ID = 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初學者)

NB這將是WordPress的外面,所以我不能使用WordPress的內置功能腳本

回答

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 
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; 

使用適當的別名並嘗試它。

0

嘗試使用post_type列。附件有一個post_type的'附件'。如果需要,我可以進一步解釋。

此外,縮略圖所附的帖子將位於post_parent欄中。

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); 

當多次連接同一個表時,使用不同的別名連接。

希望這會有所幫助。

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