Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Трудный запрос

346
04 июля 2006 года
Новая папка
256 / / 24.12.2004
Чет я не могу справиться с одним запросом :(
У каждого человека на сайте есть фотки. Каждый просмотр фотки сохраняется. Нужно реализовать поиск среди самых просматриваемых фоток текущего дня. То есть, в результаты поиска не может попасть две фотки одного юзера, а только одна или ни одной.
Таблицы:
users
photos
photo_views
346
04 июля 2006 года
Новая папка
256 / / 24.12.2004
Все сводится к тому, что мне нужно вытащить максимальное значение из таблицы.
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
То максимальное значение и айдишники могут не соответствовать
8
04 июля 2006 года
mfender
3.5K / / 15.06.2005
в photo_views записывается OID фото из photos и счётчик просмотров?
346
04 июля 2006 года
Новая папка
256 / / 24.12.2004
в photo_views сохраняется
photo_id - какую фотку смотрели
user_id - кто смотрел
date - когда просмотрено
15
05 июля 2006 года
shaelf
2.7K / / 04.05.2005
Очень образно, думаю поймёшь о чём я.
SELECT DISTINCT photo_id FROM photo_views WHERE сегодняшний день)
1
05 июля 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=shaelf]Очень образно, думаю поймёшь о чём я.
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

тогда все соответствует.
Правда не понятно где отсюда ты будешь брать дату? Ее явно не хватает.
346
05 июля 2006 года
Новая папка
256 / / 24.12.2004
Так а мне не user_id нужен, а photo_id.
SELECT photo_id, MAX(views) FROM table GROUP BY user_id
В таком случае не будет соответствовать.
SELECT photo_id, MAX(views) FROM table GROUP BY photo_id
А в таком я не смогу найти максимальное количество просмотров
1
05 июля 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Новая папка]Так а мне не user_id нужен, а 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
- т.е. выведет юзеров и картинки количество просмотров более чем среднее

или же формировать временную таблицу - туда загонять данные из запроса и от туда уже выбирать. просто с мускулем давно не работал - ньюансы не помню.
346
05 июля 2006 года
Новая папка
256 / / 24.12.2004
SELECT user_id,photo_id, MAX(views) FROM table GROUP BY user_id,photo_id
Да не будет оно так работать. Я уже так пробовал.

П.С.
Всем большое спасибо. Я уже сделал. Если кому интерестно:
SELECT
SUBSTRING(MAX(CONCAT(LPAD(views,10,'0'),photo_id)),11) AS photos

Только так оно будет работать
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог