2011-07-14 10 views
0

私たちのサイトのブログの一部はwordpressです。メインサイトのホームページに行ってみたいのは、最新のブログ記事を抜粋して、メインサイトに投稿し、ブログサイトの記事へのリンクを付けることです。私は正しく動作するSQL文を取得しようとしていると私はメインの部分があると思うが、2つのSELECTの代わりに1つのSELECTに入れたい。SQLは2つの選択肢を1つにまとめます

私は2つのSELECTを持っている理由は、投稿の最新リビジョンを取得することです。最初にリビジョンSELECTを試して、返された行があるかどうかを確認します。もし行えば、完了です。行がない(投稿にリビジョンがない)場合は、2番目の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シングルにこれら二つの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を選択する方法はありますか?クライアントに最大2行を返し、最初のものよりも何も無視するのは大したことではないでしょう。 –

+0

少なくとも、あなたはおそらく副選択することができます。その効果を更新する。しかし、2つまでのレコードを検索するだけでは、パフォーマンスに大きな影響はありません。 –

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

どのように正しい順序を維持していますか? –

+0

Opps、そのビットをコピーするのを忘れてしまった。ありがとう – Dirk

+0

まだ、あなたはどのようにWRTの注文を維持していますか?最初にリビジョンSELECTを試して、返された行があるかどうかを確認します。 2番目のSELECT文。 " –

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

どのように正しい順序を維持していますか? –

関連する問題