Обновление таблицы

Тема в разделе "SQL", создана пользователем MiXOH, 16 июл 2008.

Статус темы:
Закрыта.
  1. MiXOH

    MiXOH Гость

    Приветствую!

    У меня такая проблемка. Есть 2 таблицы со связью 1 ко многим.
    Таблица 1 (T1):
    id, contactid, ...

    Таблица 2 (T2):
    id, attempts_all, ...

    Таблицы связаны по T2.id = T1.contactid.

    Необходимо обновить Т2 так чтобы в поле attempts_all было количество записей из Т1 соответствующих данному id.

    Возможно ли такое используя только MySQL запросы???
     
  2. Aleksey

    Aleksey Гость

    Честно говоря удивлен, что никто не ответил до сих пор, видимо все в отпусках :)
    Вот, все просто и незамысловато:

    update t2
    set t2.attempts_all=(select count(t1.id)
    from t1
    where t2.id=t1.contactid);
     
  3. Glucklich

    Glucklich Гость

    Мммда. Просто не совсем понятно зачем все это необходимо? Может топикстартер нам расскажет?
     
  4. MiXOH

    MiXOH Гость

    Спасибо, работает :)

    А нужно это для того чтобы хранить количество записей из связной таблицы, так как при построении отчетности выборка запрсами является не лучшим вариантом, проще хранить сразу количество записей.
     
  5. Glucklich

    Glucklich Гость

    Вариант, который вы используете, мягко говоря некрасивый и неграмотный.
    Существует несколько способов доступа к данным: выборка по индексу и сканирование таблицы. Так вот в первом случае сервер еще до доступа к данным знает сколько будет возвращено картежей. Если вы думаете, что COUNT() по полю с использованием индекса потребует много ресурсов и времени, вы ошибаетесь.
     
  6. Aleksey

    Aleksey Гость

    Давайте не будем человека ругать ;)
    Он спросил, мы ответили. Просто важно знать, что у любой проблемы, как правило, есть несколько решений и мы выбираем не всегда лучшее.

    Не всегда использование индекса быстрее полного сканирования. Фактически мы даже не знаем, есть ли индексы у таблиц в данном случае :)
    Лично мне в этой ситуации не нравиться то, что запрос с UPDATE необходимо запускать при изменении таблицы T1. Тут я согласен с Glucklich: лучше реализовать все через запросы - это даст всегда актуальные данные, а не данные на момент выполнения последнего UPDATE, тем более, что селекты тут совсем и не сложные.
    В конце концов создайте вьюшку и юзайте ее как обычную таблицу. Главное - это помнить, что есть разные варианты решения одной задачи ;)
     
  7. Glucklich

    Glucklich Гость

    В большинстве случаев с точностью наоборот, ведь индексы для того и созданы.
    А что, сложно их добавить???
     
  8. Aleksey

    Aleksey Гость

    Подождем, пока таблицы разрастутся! Вот тогда чел сам себе все оторвет :) ... или индексы добавит. :)
     
  9. MiXOH

    MiXOH Гость

    Индексы есть!!!!!!!!!!!!!!!

    Согласен, что лучше было бы сканировать таблицы каждый раз при построении отчета, но повторюсь еще раз, не в моем маленьком конкретном случае построения одной из частей этого отчета, остальная часть строиться при помощи запросов по таблицам :)

    Я не хотел перегружать мозги форумчан кучей инфы, поэтому упростил все как можно больше, попытавшись представить проблему как можно более четко.
     
  10. Glucklich

    Glucklich Гость

    Наше дело предложить, Ваше, к сожалению, - отказаться.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей