MySQL счетчик нескольких столбцов - PullRequest
1 голос
/ 14 февраля 2012

У меня есть видео-сайт, и я храню статистику посещений в такой таблице:

+------------+------------------+------+-----+-------------------+----------------+
| Field      | Type             | Null | Key | Default           | Extra          |
+------------+------------------+------+-----+-------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL              | auto_increment |
| user_id    | int(10) unsigned | NO   | MUL | NULL              |                |
| video_id   | int(10) unsigned | NO   | MUL | NULL              |                |
| user_agent | varchar(500)     | NO   |     | NULL              |                |
| ip         | varchar(255)     | NO   |     | NULL              |                |
| date_add   | timestamp        | NO   | MUL | CURRENT_TIMESTAMP |                |
+------------+------------------+------+-----+-------------------+----------------+

Я хочу показывать статистику ежедневно (например, 2012-02-14: 5000 web views, 850 iphone views), например:

+---------------------+---------+---------------+
| date                | web     | iphone        |
+---------------------+---------+---------------+
| 2012-02-09          |    500  | 478           |
| 2012-02-10          |    2377 | 204           |
| 2012-02-12          |    247  | 21            |
| 2012-02-13          |    4879 | 236           |
| 2012-02-14          |    8767 | 101           |
+---------------------+---------+---------------+

Идентификатор пользователя iPhone - 2422, остальные - веб-пользователи.

Извините за мой плохой английский.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012
SELECT DATE(date_add) AS date, 
       SUM(CASE WHEN user_id = 2422 THEN 0 ELSE 1 END) AS Web,
       SUM(CASE WHEN user_id = 2422 THEN 1 ELSE 0 END) AS iPhone
FROM stats
GROUP by DATE(date_add)
0 голосов
/ 15 февраля 2012

Если я правильно понял ваш вопрос, что-то вроде этого запроса должно сделать это:

SELECT
  DATE(date_add) AS date,
  SUM(user_id != 2422) AS web,
  SUM(user_id = 2422) AS iphone
FROM stats
GROUP BY date

Вы можете попробовать его на SQLize .

Кстати,если вы хотите посчитать «уникальных посетителей» (идентифицированных по идентификатору пользователя, строке агента пользователя и IP-адресу), вы можете сделать это с помощью подзапроса:

SELECT
  date,
  SUM(user_id != 2422) AS web,
  SUM(user_id = 2422) AS iphone
FROM
  ( SELECT DATE(date_add) AS date, user_id
    FROM stats
    GROUP BY date, user_id, ip, user_agent ) AS foo
GROUP BY date

(если вам не нужно былоразделить счет между пользователями iPhone и других пользователей, вы можете просто использовать COUNT(DISTINCT user_id, ip, user_agent) вместо подзапроса.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...