Mysql - сохранить счет с использованием столбца - PullRequest
0 голосов
/ 25 августа 2009

Возможно, я что-то упустил из-за MySQL.

Я пытаюсь найти способ сохранить "количество" в столбце. Он должен динамически обновляться без какого-либо ручного обновления.

Я не хочу добавлять или удалять 1 в счетчик каждый раз, когда участник создает или удаляет контент. Поле в contentcount должно автоматически подсчитывать каждый контент, принадлежащий этому участнику.

create table content
(
   id_content           int not null auto_increment,
   id_member            int not null,
   primary key (id_content)
);

create table member
(
   id_member            int not null auto_increment,
   contentcount         ???????????????,
   primary key (id_member)
);

alter table content add constraint fk_member_content foreign key (id_member)
      references member (id_member) on delete cascade on update cascade;

Как мне этого добиться? Спасибо за любую помощь.

Ответы [ 6 ]

3 голосов
/ 25 августа 2009

Вам не нужно хранить счет как поле в таблице, чтобы получить к нему доступ; Вы можете получить к нему доступ в любое время, используя

SELECT COUNT(field_name) FROM table_name;

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

1 голос
/ 25 августа 2009

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

Тогда используйте:

  SELECT COUNT(*) FROM content WHERE member_id = ?

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

1 голос
/ 25 августа 2009
CREATE TRIGGER teh_counter AFTER INSERT ON content
FOR EACH ROW
BEGIN
update member set contentcount=(contentcount+1) where id_member=NEW.id_member;
END;
1 голос
/ 25 августа 2009

Я думаю, что это может быть достигнуто только после вставки и после удаления триггера.В после вставки вы увеличиваете столбец contentcount, в после удаления вы уменьшаете его.

0 голосов
/ 25 августа 2009

Я хотел сохранить счетчик содержимого, потому что я использую Propel / AMFPHP и сопоставление классов между классами Flex AS3 и PHP, сгенерированными Propel.

Триггеры для обновления / удаления - мое решение. Никогда раньше не использовал триггер, поэтому я буду учиться.

Спасибо всем за ваши ответы. Я впечатлен, что вы так быстро ответили!

0 голосов
/ 25 августа 2009

Я хотел бы создать таблицу с auto_increment, вставить в нее строку, использовать функцию last_insert_id () , чтобы получить значение, сгенерированное этой вставкой, и затем сохранить его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...