Изменения

Vitaphoto: Облака тегов

1566 байтов добавлено, 01:37, 11 декабря 2009
Выборка по тегам
'''Идея 4''': все предыдущие идеи относились к облакам, сопутствующим каждому множеству фотографий и отображаемых на странице наряду с другими элементами управления. Однако можно создать отдельную страницу с большим облаком, содержащим '''все теги''' системы вообще — чтобы иметь «общий вид».
'''Идея 5''': некоторые теги, как уже было сказано выше, с большой вероятностью отражают название какого-нибудь действа, будь то SECR, день рождения Пифа или поездка в Буревестник производства года этак 2007-го. Важно, что эти теги — теги некой отдельной категории. Вот и задача: как бы выделить их в отдельную категорию? Подумаем: по сути, их основное свойство в том, что они ставятся единожды на некоторое множество фотографий, снятых, скорее всего, за относительно небольшой промежуток времени, и после этого становятся «неживыми» — фотографии в них больше не добавляются. Формально выразить это проще всего через разброс дат фотографий, имеющих заданный тег - тег — предположим, фотографий в теге должно быть минимум 10, а разброс дат должен быть меньше месяца.
== SQL для реализации идеи № 2 № 2 ==
А теперь вопрос: как реализовать средствами MySQL идею № 2? :)
Пример:
<html><object type="application/x-shockwave-flash" data="</html>{{localimage:tagcloud.swf}}<html>" « width="640" height="480"><param name="movie" value="</html>{{localimage:tagcloud.swf}}<html>" » />
<param name="bgcolor" value="#ffffff" />
<param name="AllowScriptAccess" value="always" />
</object>
</html>
 
== Выборка по тегам ==
 
Между прочим, следует задать и ещё один вопрос, кажущийся на первый взгляд тривиальным: а как вообще выбирать из базы фотографии, имеющие заданный набор тегов?
 
Можно выделить два способа — первый выполняется быстрее на относительно небольших (меньше 8 тегов) наборах, второй лучше масштабируется.
 
=== По JOIN’у на тег ===
 
Добавляется по соединению на каждый тег набора, а так как все соединения — внутренние, они и фильтруют всё множество фотографий:
 
<code-sql>
SELECT i1.* FROM image i1
JOIN tag_image ti1 ON ti1.ti_image=i1.img_id AND ti1.ti_tag=132
JOIN tag_image ti2 ON ti2.ti_image=i1.img_id AND ti2.ti_tag=113
JOIN tag_image ti3 ON ti3.ti_image=i1.img_id AND ti3.ti_tag=115
…и так далее…
</code-sql>
 
=== Через группировку ===
 
<code-sql>
SELECT i2.* FROM image i2, tag_image ti2
WHERE ti2.ti_image=i2.img_id AND ti2.ti_tag IN (132, 113, 115) — набор тегов
GROUP BY i2.img_id
HAVING COUNT(i2.img_id)=3 — количество тегов в наборе
</code-sql>
 
Плюсы и минусы — противоположные к плюсам и минусам предыдущего подхода.
[[Категория:Разработка]]