Обновление таблицы MySQL с помощью COUNT другого - PullRequest
1 голос
/ 30 ноября 2010

Я пытаюсь обновить столбец в таблице Profiles COUNT из другой таблицы Videos. Все видео хранятся в таблице Videos, и я хочу создать в Profiles столбец с именем VideoCount, в котором будет отображаться COUNT видео этого пользователя в таблице Videos.

По сути, я хочу запустить задание cron - поэтому мне нужно знать, как найти СЧЕТ видео пользователя в таблице Videos, а затем ОБНОВИТЬ этого пользователя VideoCount в Profiles с этим числом.

Чтобы определить, кто загружал какое видео, Videos. Owner и Profiles. ID должны соответствовать. Кто-нибудь знает SQL, который мне нужен для работы cron-файла PHP?

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010
UPDATE Profiles
SET VideoCount = (
   SELECT COUNT(*)
   FROM Videos
   WHERE Videos.Owner = Profiles.ID);

так просто, как может быть ^^

и если вы хотите, чтобы это было модно: все триггеры, которые вам могут понадобиться:

DELIMITER //

CREATE TRIGGER increaseVideoCount AFTER INSERT ON Videos
  FOR EACH ROW BEGIN
    UPDATE Profiles SET VideoCount = VideoCount + 1 WHERE ID = NEW.Owner;
  END;
//

CREATE TRIGGER decreaseVideoCount AFTER DELETE ON Videos
  FOR EACH ROW BEGIN
    UPDATE Profiles SET VideoCount = VideoCount - 1 WHERE ID = OLD.Owner;
  END;
//

CREATE TRIGGER checkVideoCount AFTER UPDATE ON Videos
  FOR EACH ROW BEGIN
    IF OLD.Owner <> NEW.Owner THEN
      UPDATE Profiles SET VideoCount = VideoCount + 1 WHERE ID = NEW.Owner;
      UPDATE Profiles SET VideoCount = VideoCount - 1 WHERE ID = OLD.Owner;
    END IF;
  END;
//

DELIMITER ;
2 голосов
/ 30 ноября 2010

Если вы хотите обновить подсчет видео, чтобы вы могли обновить подсчет видео во время загрузки, так как я думаю, что для этого нет необходимости в задании cron.

update profiles set videocount=(select count(*) from videos where profileid =$profileid ) 
where profileid=$profileid
1 голос
/ 30 ноября 2010

Что-то вроде

UPDATE A SET VideoCount = 
(
  SELECT COUNT(B.*) 
  FROM Videos AS B INNER JOIN Profiles AS B ON (A.Profile_ID = B.Owner_ID)  
  GROUP BY B.Owner_ID
);

Я не уверен, что этот синтаксис полностью правильный.попробуй

...