Вопрос

Проще говоря:У меня есть таблица с 2 столбцами:одно из них - имя пользователя, а другое - псевдоним.У меня есть еще одна таблица, где у меня есть 2 столбца:один из них - username, а другой - countNicknames.

Я хочу, чтобы countNicknames содержал количество псевдонимов, которые есть у каждого пользователя (и всякий раз, когда я вставляю новый псевдоним в table1, значение в table2.countNicknames будет автоматически обновляться.

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

Это было полезно?

Решение

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

Другие советы

Я хочу, чтобы countNicknames содержал количество псевдонимов каждого пользователя (и всякий раз, когда я добавляю новый псевдоним в таблицу table1, значение в table2.countNicknames автоматически обновляется.

По сути, именно это и будет делать представление.

CREATE OR REPLACE VIEW user_nickname_count AS
    SELECT t.username,
           COUNT(*) 'countNicknames'
      FROM TABLE t
  GROUP BY t.username

Вид выглядит как стол, так что при необходимости вы можете присоединиться к нему.И единственные накладные расходы заключаются в том, что по сути это просто выполняемый запрос SELECT — значения вычисляются по требованию, а не для настройки триггеров.

Для большего информацию о представлениях смотрите в документации.

Что ж, предложение @Lasse лучше, но ...есть два других другие варианты...

  1. Есть ли у MySQL триггеры?Если это так, то вам следует добавить триггер Insert, Update, Delete в первую таблицу, который обновляет (или вставляет или удаляет по мере необходимости) атрибут CountNickNames второй таблицы каждый раз, когда запись вставляется, обновляется или удаляется из первой таблицы...

    Создать триггер NickNameCountTrig в NickNameCountTable Для вставки, обновления, удаления Как Установить nct для обновления CountNickNames = (Выберите Count() Из первой таблицы Где Name = nct.Name) Из nicknamecountable nct Где Name In (Выберите отличное имя из вставленного Объединение Выберите отличное имя из удаленного) -- ----------------------------------------------- Вставить таблицу nicknamecountable (Имя, количество ников) Выберите имя, количество () из первой таблицы ft Где не существует (Выберите * из NICKNAME Count Table Где Name = ft.Name) -------- Это необязательно ----------------------- Удалить nicknamecountable Где количество ников = 0

  2. Есть ли в MySQL индексированные представления (или что-то эквивалентное)?по - видимому , нет - так что не обращайте внимания на этот вариант ....

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top