Обновите таблицу MySQL, когда что-то изменится - PullRequest
2 голосов
/ 22 июля 2010

Это может быть глупый вопрос, но возможно ли сохранить запрос подсчета в поле таблицы, чтобы при изменении результата подсчета результат обновлялся сам?

Thread(ThreadID,NumMessages)  
Message(MessageID,ThreadID,MessageText,PreviousMessage)

Я хочу обновить поле Thread.NumMessages каждый раз, когда добавляется или удаляется сообщение с соответствующим ThreadID. Я знаю, что могу сделать это, увеличивая / уменьшая поле Thread.NumMessages или используя запрос подсчета

ВЫБЕРИТЕ СЧЕТ (*), ИЗ СХЕМЫ. Сообщение, ГДЕ ThreadID = 'SOMETHREADID'

Но есть ли способ настроить поле NumMessages, чтобы оно постоянно обновлялось, без явного указания при каждом добавлении и удалении?

Спасибо Graeme

Ответы [ 2 ]

4 голосов
/ 22 июля 2010

да, вы можете использовать представление как реализацию вашей таблицы потоков.

http://dev.mysql.com/doc/refman/5.1/en/create-view.html

Create view thread_view 
    select 
        count(*) as NumMessages, 
        threadID 
        from message 
        group by threadID
1 голос
/ 22 июля 2010

Триггеры!

Вам нужен триггер.Это должно помочь вам в поиске (зная, что искать, это полдела).http://www.databasedesign -resource.com / mysql-triggers.html

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

ваша хранимая процедура затем проверит, чтобы убедиться, что это то, о чем она заботится (вы можете добавить все виды логики здесь), а затем что-то делает (увеличивает это значение?), прежде чем MySQL выполнит исходный запрос, который вызвалэто в первую очередь.

http://www.roseindia.net/mysql/mysql5/triggers.shtml

...