Трудный запрос
У каждого человека на сайте есть фотки. Каждый просмотр фотки сохраняется. Нужно реализовать поиск среди самых просматриваемых фоток текущего дня. То есть, в результаты поиска не может попасть две фотки одного юзера, а только одна или ни одной.
Таблицы:
users
photos
photo_views
user_id---photo_id---views
1---10---2
4---41---2
11---35---2
11---50---10
Если использовать такой запрос
SELECT *, MAX(views) FROM table GROUP BY user_id
То максимальное значение и айдишники могут не соответствовать
в photo_views записывается OID фото из photos и счётчик просмотров?
photo_id - какую фотку смотрели
user_id - кто смотрел
date - когда просмотрено
SELECT DISTINCT photo_id FROM photo_views WHERE сегодняшний день)
SELECT DISTINCT photo_id FROM photo_views WHERE сегодняшний день)[/QUOTE]
:)
[QUOTe=Новая папка]Все сводится к тому, что мне нужно вытащить максимальное значение из таблицы.
user_id---photo_id---views
1---10---2
4---41---2
11---35---2
11---50---10
Если использовать такой запрос
SELECT *, MAX(views) FROM table GROUP BY user_id
То максимальное значение и айдишники могут не соответствовать
[/QUOTE]
Вобще-то запрос должен выглядеть так:
Код:
SELECT user_id, MAX(views) FROM table GROUP BY user_id
тогда все соответствует.
Правда не понятно где отсюда ты будешь брать дату? Ее явно не хватает.
SELECT photo_id, MAX(views) FROM table GROUP BY user_id
В таком случае не будет соответствовать.
SELECT photo_id, MAX(views) FROM table GROUP BY photo_id
А в таком я не смогу найти максимальное количество просмотров
SELECT photo_id, MAX(views) FROM table GROUP BY user_id
В таком случае не будет соответствовать.
SELECT photo_id, MAX(views) FROM table GROUP BY photo_id
А в таком я не смогу найти максимальное количество просмотров[/QUOTE]
Код:
SELECT user_id,photo_id, MAX(views) FROM table GROUP BY user_id,photo_id
сформирует тебе записи с максимумом просмотра каждой картинки по конкретному юзеру. Для получения мах просмотров для юзера нужно использовать HAVING (или его аналог в мускуле) т.е. приблизительно:
Код:
SELECT user_id,photo_id, MAX(views) FROM table tb1 GROUP BY user_id,photo_id
HAVING здесь выражение фильтрации - мне просто облом в 2 часа ночи соображать почем фильтровать :) задача ваша я думаю что разберетесь. Пример -
tb1.views > SELECT AVG(views) from table
- т.е. выведет юзеров и картинки количество просмотров более чем среднее
HAVING здесь выражение фильтрации - мне просто облом в 2 часа ночи соображать почем фильтровать :) задача ваша я думаю что разберетесь. Пример -
tb1.views > SELECT AVG(views) from table
- т.е. выведет юзеров и картинки количество просмотров более чем среднее
или же формировать временную таблицу - туда загонять данные из запроса и от туда уже выбирать. просто с мускулем давно не работал - ньюансы не помню.
Да не будет оно так работать. Я уже так пробовал.
П.С.
Всем большое спасибо. Я уже сделал. Если кому интерестно:
SELECT
SUBSTRING(MAX(CONCAT(LPAD(views,10,'0'),photo_id)),11) AS photos
Только так оно будет работать