У меня есть таблица обследований, который содержит (помимо прочего) следующих столбцыобновления MySQL с помощью запроса самостоятельно ссылающейся
survey_id - unique id
user_id - the id of the person the survey relates to
created - datetime
ip_address - of the submission
ip_count - the number of duplicates
Из-за большой набор записей, его непрактичным для выполнения данного запроса на лета, так пытаясь создать инструкцию обновления, которая будет периодически сохранять «кэшированный» результат в ip_count.
Целью ip_count является то, что количество повторных заявок на просмотр ip_address было получено за тот же user_id с 12-месячным периодом (+/- 6 месяцев от созданной даты).
Используя следующий набор данных, это ожидаемый результат.
survey_id user_id created ip_address ip_count #counted duplicates survey_id
1 1 01-Jan-12 123.132.123 1 # 2
2 1 01-Apr-12 123.132.123 2 # 1, 3
3 2 01-Jul-12 123.132.123 0 #
4 1 01-Aug-12 123.132.123 3 # 2, 6
6 1 01-Dec-12 123.132.123 1 # 4
Это ближайший решение, которое я придумал до сих пор, но этот запрос не в состоянии принять во внимание ограничение даты и изо всех сил, чтобы придумать альтернативный метод.
UPDATE surveys
JOIN(
SELECT ip_address, created, user_id, COUNT(*) AS total
FROM surveys
WHERE surveys.state IN (1, 3) # survey is marked as completed and confirmed
GROUP BY ip_address, user_id
) AS ipCount
ON (
ipCount.ip_address = surveys.ip_address
AND ipCount.user_id = surveys.user_id
AND ipCount.created BETWEEN (surveys.created - INTERVAL 6 MONTH) AND (surveys.created + INTERVAL 6 MONTH)
)
SET surveys.ip_count = ipCount.total - 1 # minus 1 as this query will match on its own id.
WHERE surveys.ip_address IS NOT NULL # ignore surveys where we have no ip_address
Спасибо вам за помощью заранее :)
спасибо!Начал путаться со временным столом и т. Д., Прежде чем я увидел этот ответ. Пожалуйста, см. Окончательный завершенный запрос ниже для кого-либо еще в симуляционной ситуации. – bigstylee