2013-08-09 2 views
1

У меня есть раздражающая проблема с запросом на обновление. Я пытаюсь работать ... Следующий оператор СЛЕДУЕТ обновлять channels.media_view_count до результата подзапроса (для всех каналов).Обновление MySQL с подзапросом

UPDATE channels c 
SET c.media_view_count = (
    SELECT SUM(t.view_count) 
    FROM (
     SELECT DISTINCT m.viewkey, m.view_count 
     FROM media m 
     INNER JOIN participants p ON m.id = p.medium_id 
     WHERE p.user_id = c.id AND m.is_viewable = 1 
      AND (p.pending = 0) 
    ) AS t 
); 

подзапрос отлично работает независимо друг от друга (при определении фактического идентификатора для c.id, как 47778 или любой другой), но когда я исполню это заявление, я получаю:

ERROR 1054 (42S22): Unknown column 'c.id' in 'where clause' 

Я думал, что я иметь доступ к таблице каналов (с псевдонимом c) из подзапроса? Я что-то упустил, или я совершенно здесь не прав?

Любые и вся помощь оценена :)

Спасибо,

  • Джефф

ответ

6
UPDATE channels c, (
    SELECT t.user_id, SUM(t.view_count) cnt 
    FROM (
     SELECT DISTINCT p.user_id, m.viewkey, m.view_count 
     FROM media m 
     INNER JOIN participants p ON m.id = p.medium_id 
     WHERE m.is_viewable = 1 
      AND (p.pending = 0) 
    ) AS t GROUP BY t.user_id) temp 
SET c.media_view_count = temp.cnt 
WHERE c.id = temp.user_id 

Попробуйте, как это ... не проверял, хотя :) ..
Концептуально, он должен работать

+0

Так оно и было! Спасибо, Ахиль! –

Смежные вопросы