Сложный MySQL Query с отличным - PullRequest
0 голосов
/ 29 марта 2011

Вот таблица, из которой я получаю данные "фактически это представление двух разных таблиц"

  • Первая таблица - это таблица пользователей, в которой хранится все о пользователе.
  • Вторая - это таблица журналов, в которой регистрируются те, кто просматривал видео и когда он смотрел его.

    log_views.id,
    log_views.user_id,
    log_views.video_id,
    log_views.date,
    users.user_key,
    users.name_display,
    users.img_key
    

Я пытаюсь отобразить последние 18 пользователей для просмотра видео, но я не хочу дублировать пользователей. Поэтому, если пользователь появляется дважды за последние 18, я хочу только его последний просмотр, а затем пропустить все остальные.

Я пытался использовать ключевое слово DISTINCT, но получаю несколько столбцов, поэтому оно не работает.

Ответы [ 3 ]

0 голосов
/ 30 марта 2011

Это то, что я в конечном итоге использовал.recent_video_viewers - это имя представления, которое я сделал, поэтому мне не нужно было делать никаких объединений

SELECT id, MAX(date), user_id, img_key, random_key 
FROM recent_video_viewers 
WHERE video_id = '$vr[id]' AND img_key != '' 
GROUP BY user_id 
ORDER BY MAX(date) DESC 
LIMIT 18

Я не уверен, что это лучший способ сделать это, но это работает.

0 голосов
/ 30 марта 2011

Вот запрос, который работает.Предполагается, что вам нужны журналы только для данного идентификатора видео (@video_id):

SELECT log_date, user_id, name_display
FROM (
  SELECT MAX(l.date) AS log_date, user_id
  FROM log_views AS l
  WHERE (l.video_id=@video_id)
  GROUP BY user_id
  ORDER BY log_date DESC
  LIMIT 18
) AS top
INNER JOIN users AS u ON (u.user_key=top.user_id)
0 голосов
/ 29 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...