MySQL запрос, который заполняет указанные строки с идентификаторами сущностей? - PullRequest
1 голос
/ 26 января 2012

В моей базе данных 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

Запрос, вызванный с параметром CategoryId = 2, должен изменить таблицу DisplayArticles следующим образом:

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

Надеюсь, это ясно и понятно.Пожалуйста, помогите мне написать этот запрос.

Спасибо за любой ответ.

1 Ответ

3 голосов
/ 26 января 2012

Следующие должны это сделать.

Суть этого такова

  • Использовать подвыбор, соответствующий CategoryID
  • Выберите самый последний ArticleID из Articles в этом подразделе, исключая ArticleID, которые уже назначены
  • Добавление предложения WHERE только для обновления, где IsAuto равно true.

Оператор обновления

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...