ОБНОВЛЕНИЕ MySQL - Выборочное обновление - PullRequest
0 голосов
/ 02 сентября 2010

Прежде всего, извиняюсь за ужасный заголовок, я не мог придумать лучшего способа сформулировать мою проблему.(Не стесняйтесь предлагать лучшие альтернативы)

В основном у меня есть таблица со столбцом "count".Я хочу сбросить все счетчики на ноль, за исключением 10 строк с верхними значениями.Я хочу, чтобы они были сброшены до 0.

Как мне добиться этого без написания нескольких запросов?

Обновление Теперь у меня есть следующий запрос

UPDATE covers AS t1 
  LEFT JOIN (SELECT t.cover_id 
               FROM covers t 
               ORDER BY t.cover_views DESC 
               LIMIT 10) AS t2 ON t2.id = t.id
   SET cover_views = 0
   WHERE t2.id IS NULL

Я получаю ошибку #1054 - Unknown column 't2.id' in 'where clause' - есть идеи почему?

Я также попробовал следующее с тем же результатом

UPDATE covers t1 
  LEFT JOIN (SELECT t.cover_id 
               FROM covers t 
               ORDER BY t.cover_views DESC 
               LIMIT 10) t2 ON t2.id = t.id
   SET t1.cover_views = 0
   WHERE t2.id IS NULL

Ответы [ 3 ]

2 голосов
/ 02 сентября 2010

Использование:

UPDATE TABLE t1 
  LEFT JOIN (SELECT t.id 
               FROM TABLE t 
           ORDER BY t.id DESC 
              LIMIT 10) t2 ON t2.id = t1.id
   SET TABLE.count = 0
 WHERE t2.id IS NULL
1 голос
/ 02 сентября 2010

попробуй:

update <table> t 
left outer join 
(
select id from <table> order by <counter> desc limit 10
) c on c.id = t.id 
set 
 <counter> = 0
where 
 c.id is null;
0 голосов
/ 02 сентября 2010

Вы можете использовать подзапрос:

update A set count = 0 where A.id not in 
(select id from A order by count desc limit 10)
...