Очень сложная структура запроса MySQL - PullRequest
0 голосов
/ 17 ноября 2011

посмотрите на этот запрос:

SELECT DATE(datetime), COUNT(1) as numVisits 
FROM ".table_stats." 
WHERE type='profile_visit' 
    AND user_url = '".$_GET['ref']."' 
    AND id_user='".$_SESSION['user_code']."' 
GROUP BY DATE(DATE_SUB(datetime, INTERVAL 1 DAY))

Этот запрос подсчитывает, сколько раз type равен 'profile_visit' на каждую дату, в результате он дает мне две строки (DATE (datetime), numVisits). Это снимок экрана таблицы table_stats: Table 1 Table_Stats


Хорошо, до сих пор вы можете понять, что каждый раз, когда пользователь заходит на сайт, в таблицу добавляется новый элемент с type = profile_visit и datetime с датой. и время посещения, поэтому я использую GROUP BY DATE (datetime) для подсчета общего количества посещений за день.

Здесь идет сложная часть, когда поле type равно 'click', а origin равно 'imp', что означает, что пользователь нажимает определенную кнопку на странице. , я хотел бы знать, сколько раз была нажата эта кнопка (независимо от ip) за день, так же, как я делал это при посещениях профиля.

Я могу сделать два запроса, один, чтобы узнать общее количество посещений (как и предыдущий), и другой аналогичный, просто сгруппировав по datetime , когда type is 'click' и origin is 'imp'.

Проблема в том, что я хотел бы сделать это всего за один вызов, чтобы подсчитать общее количество посещений по дате в строке NumVisits, как я делал ранее, и вызов новой строки NumClick с общим количеством сделанных кликов. Вот почему я не хочу больше вычислений на моем php-сервере, если это возможно, будет здорово сделать все вычисления на сервере sql.

Итак, наконец, если вы вызовете этот запрос к таблице:

SELECT DATE( DATETIME ) , COUNT( 1 ) AS numVisits
FROM stats_ram
WHERE TYPE =  'profile_visit'
AND user_url =  'xxx'
AND id_user =  '88e91'
GROUP BY DATE( DATE_SUB( DATETIME, INTERVAL 1 
DAY ) ) 
LIMIT 0 , 30

Вы получите:

DATE(datetime)  numVisits
2011-11-16      7

Как я могу добавить еще одну строку с итоговым типом = click И origin = imp, сделанный DATE (datetime) ???

Спасибо за любую помощь !!!

1 Ответ

3 голосов
/ 17 ноября 2011
SELECT 
    DATE(DATETIME), 
    SUM(CASE WHEN type = 'profile_visit' THEN 1 ELSE 0 END) AS numVisits,
    SUM(CASE WHEN type = 'click' AND origin = 'imp' THEN 1 ELSE 0 END) numClicks
FROM stats_ram
WHERE user_url = 'xxx'
    AND id_user = '88e91'
GROUP BY DATE(DATE_SUB(DATETIME, INTERVAL 1 DAY)) 
LIMIT 0, 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...