2011-07-14 35 views
0

我們網站的博客部分是wordpress。我想要做的主要網站的主頁是採取最新的博客文章摘錄,並將其放置在主站點上,並鏈接到博客網站上的文章。我試圖讓SQL語句正常工作,我認爲我有主要部分,但是想把它放到一個SELECT中而不是兩個SELECT中。SQL將兩個選項合併爲一個

我有兩個選擇的原因是爲了確保我得到最新版本的帖子。首先,我嘗試修訂SELECT來查看我是否返回了一行 - 如果我這樣做,我就完成了。如果沒有行(對帖子沒有修訂),請使用第二個SELECT語句。

SELECT TOP 1 * FROM wp_posts 
WHERE post_type = 'revision' 
    AND post_parent IN (SELECT [object_id] 
       FROM wp_term_relationships 
       WHERE term_taxonomy_id = 3) 
ORDER BY post_modified DESC 

SELECT TOP 1 * FROM wp_posts 
WHERE id IN (SELECT [object_id] 
      FROM wp_term_relationships 
      WHERE term_taxonomy_id = 3) 
ORDER BY post_modified DESC 

我怎麼能這兩個的SELECT合併成一個單一的選擇,所以我可以放心的總是得到一個排回(即最近的博客文章)

在此先感謝。

想到的

回答

1

的第一件事是使用UNION,然後你可以把結果集的第一行:

SELECT TOP 1 * FROM wp_posts 
WHERE post_type = 'revision' 
    AND post_parent IN (SELECT [object_id] 
       FROM wp_term_relationships 
       WHERE term_taxonomy_id = 3) 
ORDER BY post_modified DESC 
UNION 
SELECT TOP 1 * FROM wp_posts 
WHERE id IN (SELECT [object_id] 
      FROM wp_term_relationships 
      WHERE term_taxonomy_id = 3) 
ORDER BY post_modified DESC 

UPDATE

以前SQL返回的一個簡單的子查詢第一條記錄:

SELECT TOP 1 * FROM (
SELECT TOP 1 * FROM wp_posts 
WHERE post_type = 'revision' 
    AND post_parent IN (SELECT [object_id] 
       FROM wp_term_relationships 
       WHERE term_taxonomy_id = 3) 
ORDER BY post_modified DESC 
UNION 
SELECT TOP 1 * FROM wp_posts 
WHERE id IN (SELECT [object_id] 
      FROM wp_term_relationships 
      WHERE term_taxonomy_id = 3) 
ORDER BY post_modified DESC) 
+0

我在想工會爲好,但不與它有太多的經驗,我相信它。有沒有辦法從聯合結果集中選擇前1名?我想不會有什麼大不了的,可以將最多兩行返回給客戶端,而忽略比第一個更多的行。 –

+0

至少你可以重新選擇;讓我更新這個效果;但是,只檢索最多2條記錄_不應對性能產生任何顯着影響。 – 2011-07-14 21:17:23

1

請問這是否適合您?

SELECT TOP 1 wp_posts.* 
FROM wp_posts, (SELECT [object_id] 
       FROM wp_term_relationships 
       WHERE term_taxonomy_id = 3) relations 
WHERE 
    (post_type = 'revision' AND post_parent IN relations) OR 
    (id IN relations) 
ORDER BY post_modified DESC 

或者,

SELECT TOP 1 wp_posts.* 
FROM wp_posts, (SELECT [object_id] 
       FROM wp_term_relationships 
       WHERE term_taxonomy_id = 3) relations 
WHERE 
    (post_type = 'revision' AND post_parent IN relations AND id NOT IN relations) OR 
    (post_type <> 'revision' AND post_parent NOT IN relations AND id IN relations) 
ORDER BY post_modified DESC 
+1

你如何保持正確的排序? – 2011-07-14 21:05:25

+0

奧普斯,忘了複製一下。謝謝 – Dirk

+0

不過,你如何維持秩序WRT「首先,我試着修改SELECT,看看我是否得到一行返回 - 如果我這樣做,我完成了。如果沒有行(沒有修改的帖子),使用第二個SELECT語句。「? – 2011-07-14 21:08:17

0
SELECT TOP 1 * FROM wp_posts 
WHERE (post_type = 'revision' 
    AND post_parent IN (SELECT [object_id] 
       FROM wp_term_relationships 
       WHERE term_taxonomy_id = 3)) 
OR (id IN (SELECT [object_id] 
      FROM wp_term_relationships 
      WHERE term_taxonomy_id = 3)) 
ORDER BY post_modified DESC 
+0

你如何保持正確的排序? – 2011-07-14 21:06:09