Сложный двухтабличный UPDATE на MySQL

12
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#11
-K-:
Ну для начала свести уникальность пользователя к одному полю - это бы уже упростило заметно запрос

Запрос - упростило бы. А вот создание уникального номера для пользователя и привязку его к источнику - нет. То есть я генерю идентификатор пользователя так: смотрю номер секунды + делаю rand для получения одного их 7-8 тыс. случайных значений.

Неизменность точки зрения неизменно порождает иллюзию понимания.
-
На сайте с 07.12.2005
Offline
97
-K-
#12

Если значения получаются правильные, то можно их и вставлять:


INSERT INTO stats_aggregate (landing_login_id, unique_users) SELECT
sTable.landing_login_id,
(
SELECT
COUNT(sTable2.landing_login_id)
FROM
stats AS sTable2
WHERE
sTable.landing_login_id = sTable2.landing_login_id AND
user_timestamp IN (
SELECT DISTINCT
user_timestamp
FROM
stats AS sTable3
WHERE
sTable3.landing_login_id = sTable.landing_login_id
) AND
user_rand IN (
SELECT DISTINCT
user_rand
FROM
stats AS sTable4
WHERE
sTable4.landing_login_id = sTable.landing_login_id
)
) AS count
FROM stats AS sTable GROUP BY sTable.landing_login_id
Слава Шевцов
На сайте с 23.07.2005
Offline
370
#13

И апдейтить так же можно. Спасибо. Сейчас ещё отспасиблю.

-
На сайте с 07.12.2005
Offline
97
-K-
#14

Люблю такие нетривиальные запросики, а то мозг заржавеет :)

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#15
СКОРПИОН:
Слава Шевцов, я бы триггер на первую таблицу повесил - нагрузка на СУБД минимальная, ожидаемый результат будет получаться в реальном режиме времени... В противном случае, при больших объёмах данных, такие скрипты обычно запускают на второй машине, куда реплицируется база данных.

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий