2012-01-26 12 views
1

私は、MySQLデータベース内の2つのテーブル持っている:今、私は何をする必要があるか指定された行をエンティティIDで満たすMySQLクエリ?

DisplayArticles

Id 
CategoryId 
ArticleId 
IsAuto 

記事

Id 
CategoryId 
Title 

はその意志MySQLのクエリを記述することですIsAutoが指定されたカテゴリ(最新のものが一番上のもの)からの最新記事でtrueに設定されているすべてのポジションを入力します。

例えば、私が持っているかどう記事:

... 

53 2 'Article that is older' 
54 2 'Article about something funny' 
55 6 'Article about something else' 
56 2 'Article about something interesting' 

など、私の表示の記事:

1 2 12 false 
2 2 42 true 
3 2 41 true 
4 2 23 false 
5 2 25 false 

クエリ= 2は、このようDisplayArticlesテーブルを変更する必要があり区分パラメータとで呼び出さ:

1 2 12 false 
2 2 56 true 
3 2 54 true 
4 2 23 false 
5 2 25 false 

これはわかりやすいものです。 私はこのクエリを書くのに手伝ってください。

ありがとうございました。

+2

NOPが、私は完全にそれを理解していませんでした。何をしたいですか? –

+0

私が書いたとおり、最新の記事IDをDisplayArticlesテーブルに追加するクエリを作成する必要がありますが、IsAutoとしてマークされている位置にのみ配置します。厳密に例のように... –

答えて

3

これを行う必要があります。

それの要旨はWHERE句を追加し、既に

  • 割り当てられているArticleID年代を除いて、この副選択でArticlesから最新ArticleIDを選択し、この

    • 使用のようCategoryID
    • の副選択のマッチングを行きます更新のみIsAutotrueとなります。

    UPDATE文

    UPDATE DisplayArticles 
    SET ArticleID = (SELECT MAX(ArticleID) 
            FROM Articles AS a       
            WHERE a.CategoryID = CategoryID 
              AND ArticleID NOT IN (
              SELECT ArticleID 
              FROM DisplayArticles da 
              WHERE da.CategoryID = CategoryID 
              ) 
            ) 
    WHERE IsAuto = 'true' 
    
  • +0

    これは最新の記事の全範囲でそれを埋めるべきです。例えば、ids55と56の最新記事とisAuto = trueの2つの行がある場合、そのうちの1つは55そして2番目の56 ...どんなアイデア? –

    +0

    @ŁukaszW.pl - 私はこの声明を変更しました。確認できますか? –

    +0

    これはうまく動作するいくつかの深刻なチャンスがあります。私はそれをテストし、それを承認します..ありがとう.. –

    関連する問題