2011-04-14 275 views
2

我使用通用的wordpress sql語句來獲取帖子標題。我想用一個seo插件中的allme的postmeta值來替換帖子標題,這是一個全部在seo標題中存在的帖子。在mysql語句中使用if語句

如何在sql命令中使用if語句?

現有代碼沒有全部在一個if語句。

//Limit to last 30 days, 1,000 items      
$rows = $wpdb->get_results("SELECT $wpdb->posts.ID, $wpdb->posts.post_date_gmt, $wpdb->posts.post_title 
        FROM $wpdb->posts, $wpdb->postmeta 
        WHERE $wpdb->posts.post_status='publish' 
        AND (DATEDIFF(CURDATE(), post_date_gmt)<=30) 
        $includeMe 
        ORDER BY $wpdb->posts.post_date_gmt DESC 
        LIMIT 0, 1000");  

這是菲爾的回答:

$rows = $wpdb->get_results("SELECT COALESCE($wpdb->postmeta.meta_value, $wpdb->posts.post_title) AS post_title, $wpdb->posts.post_date_gmt, $wpdb->posts.ID 
        FROM $wpdb->posts 
        LEFT JOIN $wpdb->post_meta 
        ON $wpdb->posts.ID = $wpdb->postmeta.post_id 
        AND $wpdb->postmeta.meta_key = '_aioseop_title' 
        WHERE $wpdb->posts.post_status='publish' 
        AND (DATEDIFF(CURDATE(), post_date_gmt)<=30) 
        $includeMe 
        ORDER BY $wpdb->posts.post_date_gmt DESC 
        LIMIT 0, 1000");  

回答

1

後得到一個錯誤,現在的新功能我在post_meta表使用COALESCE()LEFT JOIN。例如(注意,一般只能查詢,不能直接獲得WordPress)

SELECT COALESCE(post_meta.value, posts.title) AS title 
FROM posts 
LEFT JOIN post_meta 
ON posts.id = post_meta.post_id 
AND post_meta.key = 'some_meta_key' 
+0

酷感謝 - 現在要嘗試 - 之前從未見過聚結()函數。 – 2011-04-14 02:11:24

+0

菲爾,我只是改變了我的功能,我收到一個錯誤 - 我將把它重新發回問題 - 你介意看看嗎? – 2011-04-14 02:58:06

+0

什麼是錯誤? – squawknull 2011-04-14 03:04:00