2016-01-06 1 views
0

Я ищу следующее! У меня есть таблица резиденций, каждая резиденция имеет удостоверение личности, которое соответствует району, в котором он находится. У меня есть таблица районов с ID, NAme и количество мест проживания. Я бы хотел, чтобы количество резиденций в каждом районе динамично обновлялось, поскольку резиденции перемещаются из района в район. Я понимаю, что будет нужен триггер, чтобы заставить обновление, но я не уверен, что мне это нужно, чтобы быть, и я не понимаю, какmysql динамическое автоматическое обновление расчетной строки

INSERT INTO District.resCount SUM(Select * FROM residences R WHERE R.dID = District.ID);

на регулярные промежутки времени.

+0

Я понимаю, вы хотели это число, которое будет добавлено, но у вас считал, что просто запускает этот запрос SUM каждый раз, когда вам нужен этот счет? Чтобы помочь вам ответить на этот конкретный вопрос, скажите, пожалуйста, что вы используете для базы данных? MySQL, Microsoft SQL, DB2 и т. Д. Также, регулярно, вы хотите, чтобы этот счет часто обновлялся? –

+0

Вам нужен триггер, но не нужно «вставлять», вам нужно «обновить». Кроме того, почему вам нужно вычисленное значение в вашей таблице, это пустая трата пространства и ресурсов, которые вычисляют каждый раз, когда это изменяется. Легко включить расчет в ваш возвращаемый запрос. –

+0

, пока я понимаю, что это ресурс, это то, что мне нужно легкодоступным. Я полный рабочий день здесь и не могу тратить 5 минут каждый день за отчет о моем боссе. Это просто проще. @BrianGerhards MySQL, регулярный промежуток времени один раз в день, предпочтительно, когда в офисе нет никого. –

ответ

0

Если вы используете MySQL, Попробуйте это:

SET @districtID = 'some_id' 
SET @rescount = Select count(*) FROM residences WHERE dID = @districtID 

INSERT INTO District (ID, rescount) values (@districtID, @rescount); 

Или вы можете использовать триггер так:

CREATE TRIGGER upd_district AFTER INSERT ON residences 
    FOR EACH ROW 
    BEGIN    
     SET @rescount = Select count(*) FROM residences WHERE dID = NEW.dID 
     UPDATE District SET rescount = @rescount WHERE districtID = NEW.dID 
    END; 
+0

Это будет делать только один раз, правда, правильно? Я ценю ответ, но не уверен, что он делает именно то, что мне нужно. –

+0

Я отредактировал ответ, чтобы вместо этого использовать триггер. –

+0

Я попробую это сегодня в моей тестовой среде и в ближайшее время пометить как решение. Мой график занят сегодня, так что может потребоваться день или два! Большое спасибо за информацию! –