2012-01-26 21 views
1

我有兩個表在我的MySQL數據庫:用實體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 

查詢調用與參數類別ID = 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

以下應該這樣做。

它的要點是這樣的

  • 使用上CategoryID
  • 子選擇匹配這個子查詢中排除ArticleID的已分配
  • 選擇從Articles最新ArticleID添加WHERE條款只更新IsAuto等於true

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

它應該用最新的文章的全部範圍填充它..例如,如果有最新的文章與ID 55和56和兩行與isAuto = true,那麼其中一個應該得到55第二個56 ...任何想法? –

+0

@ŁukaszW.pl - 我改變了陳述,你能證實嗎? –

+0

現在它有一些嚴重的工作很好的機會..我會測試它,然後批准它..謝謝.. –