• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

  • Автор темы Автор темы MiXOH
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
M

MiXOH

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

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

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

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

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

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

update t2
set t2.attempts_all=(select count(t1.id)
from t1
where t2.id=t1.contactid);
 
Мммда. Просто не совсем понятно зачем все это необходимо? Может топикстартер нам расскажет?
 
Спасибо, работает :)

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

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

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

Я не хотел перегружать мозги форумчан кучей инфы, поэтому упростил все как можно больше, попытавшись представить проблему как можно более четко.
 
Наше дело предложить, Ваше, к сожалению, - отказаться.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab