Посетители и посещения профиля пользователя MySQL - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь написать sql для получения посещений профиля пользователей и их посещений других профилей.

Схема БД

mysql> desc user_views;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| user_id    | mediumint(8) | NO   | PRI | 0       |       |
| visitor_id | mediumint(8) | NO   | PRI | 0       |       |
| created_at | datetime     | NO   |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+    

mysql> desc users;
+--------------------+----------------+------+-----+---------+----------------+
| Field              | Type           | Null | Key | Default | Extra          |
+--------------------+----------------+------+-----+---------+----------------+
| id                 | mediumint(8)   | NO   | PRI | NULL    | auto_increment |
| first_name         | varchar(255)   | YES  |     | NULL    |                |
| last_name          | varchar(255)   | YES  |     | NULL    |                |
| email_address      | varchar(255)   | NO   | UNI | NULL    |                |
| username           | varchar(128)   | NO   | UNI | NULL    |                |
| algorithm          | varchar(128)   | NO   |     | sha1    |                |
| salt               | varchar(128)   | YES  |     | NULL    |                |
| password           | varchar(128)   | YES  |     | NULL    |                |
| is_active          | tinyint(1)     | YES  | MUL | 1       |                |
+--------------------+----------------+------+-----+---------+----------------+

Мои посетители SQL

Это отображение пользователя только один раз.Например, если я обновлю профиль пользователя А три раза, будет отображаться последнее посещение.Я хочу следить за каждым посещением, чтобы я мог сообщить пользователю его уникальные просмотры и общее количество просмотров профиля.

SELECT v.visitor_id FROM user_views v, users u, users u2
WHERE v.user_id = :user_id AND v.visitor_id != :user_id
AND u.id = v.user_id AND u2.id = v.visitor_id
AND u.is_active = 1 AND u2.is_active = 1
AND NOT EXISTS 
   (
     SELECT * FROM user_profile_view v2 
     WHERE v2.visitor_id = v.visitor_id  
     AND v2.created_at > v.created_at
   )
ORDER BY v.created_at DESC LIMIT 0, 10

Посещенный SQL

Снова то же самое для этого,Пользователь будет отображаться только один раз.

SELECT v.user_id FROM user_views v, users u, users u2 
WHERE v.user_id != :visitor_id AND v.visitor_id = :visitor_id
AND u.id = v.user_id AND u2.id = v.visitor_id
AND u.is_active = 1 AND u2.is_active = 1
AND NOT EXISTS 
  (
    SELECT * FROM users_view v2
    WHERE v2.user_id = v.user_id AND v2.created_at > v.created_at
  )
GROUP BY v.user_id
ORDER BY v.created_at DESC LIMIT 0, 10

SQL работает нормально, но я хочу знать, считаете ли вы, что SQL можно улучшить, или я должен написать его более эффективным способом.

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