Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Хранимая процедура. Каунтер.
Покинул форум
Сообщений всего: 102
Дата рег-ции: Янв. 2010
Помог: 0 раз(а)
привет!
скажите пожалуйста, можно ли реализовать следующую хотелку, и если да, то как?
есть таблица новостей
news: id; cat_id; title ...
так же есть таблица категорий
cats: id; name; count ...
логическую связь выделил жирным.
хотелось бы что бы при добавлении новости для категории news:cat_id=1, у категории cats:id = 1 увеличивался cats:count на единицу, и соответственно при удалении новости, каунт автоматически уменьшался.
все это безусловно можно вынести в контроллер сайта, но мне бы хотелось реализовать данную задачу на стороне БД.
надеюсь понятно объяснил и кто-нибудь поможет
ps:
Server type: MySQL
Server version: 5.5.38 - Source distribution
phpMyAdmin Version information: 4.2.5
exlant
Отправлено: 17 Февраля, 2015 - 05:03:36
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
UPDATE cats SET cats.count = cats.count + 1 WHERE new.cat_id = cats.id
haveFun пишет:
к тому же при удалении записи через пма, каунт придется менять вручную.
Если вы собираетесь использовать pma в качестве админки, то вам придется отказатся от каких либо сложных схем в базе данных. (Добавление)
Кстати, тоже самое можно сделать без денормализации:
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
pma - это я так понял PHPMyAdmin? я и не подумал бы, что кто то его в качестве админки использует
haveFun
Отправлено: 17 Февраля, 2015 - 07:18:52
Гость
Покинул форум
Сообщений всего: 102
Дата рег-ции: Янв. 2010
Помог: 0 раз(а)
повторюсь в третий раз. альтернативные способы меня не интересуют. Ch_chov, пожалуй мне нужен именно триггер, спасибо, но почему-то при добавлении записи в news вылетает ошибка с текстом корректного инсерта а так же вот это:
но это не помогло. каунт не меняется. типы обоих айдишников int(11).
в чем может быть проблема? (Добавление)
да. пма - это пхпмайадмин. я знаю что это далеко не навикат, но для моих текущих задач он вполне подходит.
Ch_chov
Отправлено: 17 Февраля, 2015 - 07:30:53
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
haveFun пишет:
#1054 - Unknown column 'news.cat_id' in 'where clause'
news.cat_id - зачем вы s сюда добавили?
haveFun
Отправлено: 17 Февраля, 2015 - 07:58:15
Гость
Покинул форум
Сообщений всего: 102
Дата рег-ции: Янв. 2010
Помог: 0 раз(а)
хм, думал опечатка, и там должно быть название текущей таблицы. это что же указатель какой-то?
исправил, теперь все заработало, спасибо!
Ch_chov
Отправлено: 17 Февраля, 2015 - 08:00:21
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
На удаление новости, тоже желательно триггер сделать..
exlant
Отправлено: 17 Февраля, 2015 - 08:14:56
Посетитель
Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015
Помог: 14 раз(а)
Давно назревает такой вопрос!
А насколько актуально или неактуально использовать хранимые процедуры и тригеры?
Есть ли смысл переводить все/большинство запросов на сайте в процедуры, а потом просто вызывать их! Или же где лучше использовать процедуру, а где просто запрос к базе? (Добавление)
Используя данный случай, если админка будет написана на php, для увеличения count лучше использовать заранее подготовленный тригер, или же описать два запроса к базе в php?
Как правильней сделать, и как делается на больших проектах?
Ch_chov
Отправлено: 17 Февраля, 2015 - 08:30:31
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
Думаю не стоит смешивать в одну кучу процедуры и триггеры. Конкретно в этом случае тригер может быть уместен, если по каким либо причинам обычный подсчёт с JOIN и GROUB BY нельзя использовать. Счетчики это вообще типовой пример применения тригеров.
С процедурами сложнее..
Наверно от архитектуры приложения зависит. Я меня вот ни разу не возникала необходимость использовать хранимые процедуры. А вообще этот вопрос уже обсуждался не раз:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.