Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рейтинг фотографий, Запрос отображающий не отрейтеные фотки 
V
    Опции темы
PaulDee
Дата 14.2.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Нужно выбрать новые фотографии, с условием, чтобы не выводились уже отрейтенные фото текущим пользователем. Принцип как у hotornot.com.
Вот что у меня получилось:

1. photo {id,user_id,pic_name}
2. photo_rate {id, rating, photo_id, who_rate_id}

Код

select photo.id,pic_name,user_id from photo 
   where (select count(*) from photo_rate where photo_id = photo.id and who_rate_id=' {id данного пользователя} ') = 0 
       order by photo.id desc limit 1";


Все бы хорошо, но запрос почти ложит мой глюконутый сервер. Хотелось бы сделать его менее ресурсоемким.

Спасибо!


PM MAIL   Вверх
PaulDee
Дата 15.2.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



вот с 6 секунд до 0.1-0.5 дошел, но с увеличением таблицы рейтинга, пропорционально и существенно увеличивается время запроса...

Код

select ph.id from photo ph 
  left join (select who_rate_id,photo_id from photo_rating where who_rate_id='{id юзера}') rp
  on ph.id = rp.photo_id
  where rp.who_rate_id is null
  order by ph.id desc limit 1

PM MAIL   Вверх
skyboy
Дата 15.2.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Код

SELECT ph.id 
FROM photo ph 
LEFT JOIN photo_rate pr
ON pr.photo_id = ph.id AND pr.who_rate_id = '<id юзера>'
WHERE pr.id is NULL

Но так же быстро, как и INNER JOIN это и не будет. Опять же, индексы не будут задействованы на условие pr.id is NULL.
Может, лучше кешировать результаты проверки?
PM MAIL   Вверх
PaulDee
Дата 15.2.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



skyboy, 
Спасибо большое smile

Кешировать наверное будет не эффективно, т.к. каждый раз результат проверки будет разный.
Буду решать проблему по мере поступления, пока меня такой результат вполне устраивает.

Еще раз спасибо!


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.