2011-10-27 19 views
0

次のSQLがあり、2つの異なる方法で記事を選択しています。すべてのアーティクルはアーティクルテーブルに格納されます。いくつかの記事は月の記事(Articles_Fitness)としてマークされ、その他は純粋なフィットネス記事(ArticlesInCategories)としてマークされています。2つの異なるテーブルから1つのフィールドを2つ選択する(結合を使用)

私の問題は、Formatted_DateとしてArticles_Fitness.StartDateとArticles.PublicationDateの両方を選択する必要があることです。これは可能ですか、Formatted_Date1とFormatted_Date2とラベルを付けて出力する必要がありますか?

SELECT 
     Articles.ArticleID, 
     Articles.Title, 
     Articles.Author, 
     Articles.Abstract, 
     date_format(Articles_Fitness.StartDate, '%M %d, %Y') AS Formatted_Date, 
     date_format(Articles.PublicationDate, '%M %d, %Y') AS Formatted_Date 
    FROM 
     Articles 
     LEFT JOIN Articles_Fitness 
      ON Articles_Fitness.ArticleID = Articles.ArticleID 
      AND Articles_Fitness.StartDate <= CURDATE() 
     LEFT JOIN ArticlesInCategories 
      ON ArticlesInCategories.ArticleID = Articles.ArticleID 
      AND ArticlesInCategories.CategoryID = '1' 
    WHERE 
     Articles.Body IS NOT NULL AND 
     Articles.Body != '' AND 
     Articles.Public ='1' 
+0

出力フォーマットの問題のほかに、記事を選択する方法に(潜在的な)重大な問題があります。出力にArticleInCategories.CategoryID = '1'の記事を含めるようにし、Articles_Fitnessに記事を含める(開始日の基準を満たす記事)ようにしますか、または両方の記事が真である場合にのみ記事を出力に表示しますか? – UltraOne

+0

ONEがtrueの場合は記事を含めることをお勧めします。 –

+1

あなたが価値のあるものについては、Article.Body WHERE制約を1つに崩壊させることができます: 'Articles.Body!= '''。フィールドがnullの場合はfalseになります。 – pilcrow

答えて

1

あなたはArticles_Fitness.StartDate存在する場合、それ以外の場合はArticles.PublicationDateたいと言っていますか?

... 
DATE_FORMAT(COALESCE(Articles_Fitness.StartDate, Articles.PublicationDate), 
      '%M %d, %Y') AS Formatted_Date 
... 
+0

私はCOALESCEを以前見たことがありません。どうもありがとうございました! –

+0

@ジョン、あなたはあなたがそれなしでどのように住んでいたのだろうと思うでしょう。 :) – pilcrow