вторник, 20 августа 2013 г.

Joomla + JoomGallery: Сводные итоги конкурса

На сайте проводится конкурс детского рисунка. В галерее выставлены рисунки детей разных возрастов. У авторизованных пользователей есть возможность проголосовать за любой рисунок, выставив оценку от 1 до 5.
Все это реализовано штатными средствами CMS Joomla и модуля JoomGallery. Сегодня потребовалось увидеть сводную таблицу промежуточных результатов.

В настройках галереи ничего похожего не увидел (может и плохо искал) поэтому обратился к первоисточинку - базе данных. Нашел таблицы с голосами и рисунками. Немного шаманства с SQL и получаем сводную таблицу.


SELECT jpic.id, jpic.imgtitle, sum(jvote.vote) Vsum, count(*) Vcount, sum(jvote.vote)/count(*) Vmidle, jpic.hits, jcat.name
FROM `jos_joomgallery_votes` jvote, `jos_joomgallery` jpic, `jos_joomgallery_catg` jcat
WHERE
jpic.id = jvote.picid
AND
  (jpic.catid =136 OR jpic.catid =137)
AND
  jcat.cid = jpic.catid
GROUP BY jpic.id
ORDER BY `Vsum` DESC 


Получаем таблицу с перечнем рисунков отсортированную по максимально набранной сумме баллов, в качестве дополнительных полей указаны: количество оценок по каждому рисунку, средний балл, количество просмотров (hits), а также указаны наименования категорий (возрастные категории).


Несложными манипуляциями получаем интересующие нас данные, не ломая при этом работы сайта.

P.S. В запросе есть одна уязвимость про которую я знаю. Кто что найдет, велком в комменты.