powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса (php+mysql)
4 сообщений из 4, страница 1 из 1
Оптимизация запроса (php+mysql)
    #38680352
Osterlitz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, помогите оптимизировать запрос на сайте, написанном на php.

В общем сайт представляет собой собрание фотографий, за которые можно голосовать. Вся информация о фотографиях хранится в таблице `photos`:

id(int) | country (int) | city(int)

т.е. каждая фотография сделана в определенной местности. Тип данных - int, т.к. Значение берется из других таблиц (`country` и `city`), названия (`country.name` и `city.name`) соответствуют идентификаторам из таблицы фото. Т.е. чтобы узнать, в каком городе сделан снимок - создает запрос:

Select * from `city` where `city.id`='значение photos.city из таблицы photos'

Аналогично и со странами.

Также есть таблица, в которую заносятся все данные о голосованиях `rate`:

win(int) | value(int) | date(date)

Win - это идентификатор фотографии
Value - значение голосования. Если голосовали "за", то в таблицу попадает значение +2, если против, то -1.
Date - дата голосования.

Таким образом можно составить рейтинг фотографий:

Select *,sum(`value`) as `summa` from `rate` group by `win` where `date` = 'подставляем сюда период за какой надо выбрать значения' order by `summa` desc;

Довольно простой и понятный запрос, а теперь - ВОПРОС!!!


На странице с фотографией необходимо создать 3 графика "местонахождения" в рейтинге фотографии (по городу, по стране и вцелом по сайту).

Другими словами нужно 3 массива, в котором содержалась следующая информация:

$array = ('date20140101' => '1-e место', 'date20140102' => '30-e место, 'date20140103' => '283-е место'... и т.д.);

Это для общего графика. Аналогичные массивы нужны также для города и страны. Т.е. Элемент массива $array['date20140101'] показывает рейтинг фотографии среди всех фотографий, за которые голосовали 1-го января. Соответственно для массивов с городом и страной надо показать на каком месте находилась эта фотография такого-то числа среди фотографий из этого города (страны) за которые голосовали в определенный день. Сложность даже не стом, чтобы подсчитать сумму баллов по необходимым условиям, а сколько узнать рейтинг. Если сначала запросить количество всех возможных результатов по необходимым условиям, создать рейтинг и найти в нем место этой фотграфии - необходимо сделать несколько запросов по таблице `rate` и связать ее с остальными таблицами. А в таблице `rate` Может быть несколько сотен тысяч записей. Что просто "накрывает" сервер. Может можно как-нибудь упростить запрос. Чтобы из него сразу возникал нужный массив. 3 запроса = 3 массива.

Если мои рассуждения неверны, буду рад выслушать критику. Заранее благодарен, очень нужна ваша помощь.
...
Рейтинг: 0 / 0
Оптимизация запроса (php+mysql)
    #38680429
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OsterlitzДовольно простой и понятный запросАга, только неправильный.


Osterlitz3 графика "местонахождения" в рейтинге фотографии (по городу, по стране и вцелом по сайту).делаем таблицу для этих дынных
Код: sql
1.
create table rate_stats (win id, dt date, country int, city int, rank int);


заполняем (если по городам, то пишем только ид города, по странам - ид страны, общий рейтинг - нуллы там и там)
для примера - заполнение для статистики по городам
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
insert into rate_stats
select t0.win,t0.dt,null,t0.id
 ,if(@t1=t0.id and @t2=t0.dt
     ,@rn:=@rn+1
     ,@rn:=1+least(0,@t1:=t0.id)+least(0,@t2:=t0.dt)
    ) as rank 
from (
 select r.win,r.dt,c.id,sum(r.value) r
 from rate r
 join city c on r.city=city.id
 group by 1,2,3
) t0
,(select @rn:=0, @t1:='_', @t2:='_')
order by t0.id,t0.dt,t0.r desc,t0.win

(за пониманием происходящего - в фак по использованию переменных)
по мере необходимости добавляем дынные за новые даты
можно и за текущую добавлять, insert on duplicate key update в помощь
PS. а шрифт в теге срц, оказывается, не моноширинный О_о
...
Рейтинг: 0 / 0
Оптимизация запроса (php+mysql)
    #38680750
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня сразу возникает вопрос...

- ну есть люди которые (вот мне мастер тырнета по просьбе назвать маршрутизатор роутер, назвал его Rauter ), или которые вместо того чтобы назвать
value|val назовут znachenie|zn

но чем руководствовался автор сей базы, изобретая название win ???
...
Рейтинг: 0 / 0
Оптимизация запроса (php+mysql)
    #38680779
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
также не понятно, какой запрос надо помочь оптимизировать?!


вообще подщёт позиции(для определённой записи) - запрос вроде
Код: sql
1.
2.
3.
4.
5.
select t.fields, (select count(*) from target tt where tt.criteria<=t.criteria) as 'rate'

from target t
where
.....


тоесть самому добавить без всяких джоинов значение позиции - сколько есть елементов у которых критерий рейтинга меньше или равен нашему.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса (php+mysql)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]