13 530
правок
Изменения
Массовая правка: замена Категория:Разработка на Категория:Архив, замена Category:Разработка на Категория:Архив
== Идеи ==
'''Идея первая1''': нужно показывать облако только из тегов, встречающихся хотя бы один раз в просматриваемом множестве фотографий (коим может быть, например, множество фотографий, имеющих заданный набор тегов).
'''Идея вторая2''': часто бывает, что какие-то теги являются «подтегами» других. Например, все фотографии с людьми помечены тегом ''«люди»'', а некоторые из них в то же время помечены именем конкретного человека. Другой пример: все фотографии с какой-нибудь тусовки-выезда помечены тегом ''«Тусовка-выезд 2009»'', при этом у поездки были «подмероприятия», например, ''«Экскурсия на Фиолетовые Холмы»'', и соответствующие подмножества фотографий помечены, кроме тега ''«Тусовка-выезд 2009»'', тегами подмероприятия.
«Подтеги» каких-либо из отображаемых тегов отображать не нужно, так как они скорее всего имеют смысл только в контексте своего родителя.
Правда, возможна ситуация, когда два тега A и B являются «подтегами» друг друга, то есть — встречаются на фотографиях исключительно вместе. Возникает, конечно, вопрос, нафига ж их тогда действительно два, а не один? То есть Вообще-то с моей точки зрения эта ситуация находится за гранью разумного, и хотя встречаться. Встречаться она, скорее всего, будет, но редко и в большинстве случаев — по ошибке или совпадению (что-то вроде: ''«ну да, ну получилось, что из фотографий людей в галерее только фотографии моей девушки… ну ревнивая она…»'').
Так что в ситуации «тождественности» тегов A и B в облаке их нужно отображать оба.
'''Идея третья3''': разумно разбить одно большое облако на несколько меньших по различным диапазонам популярности тегов — скорее всего, трём: одно облако очень популярных тегов, второе — средних по популярности, третье — совсем разовых. Отображать по умолчанию, естественно, первое.
'''Идея четвёртая4''': все предыдущие идеи относились к облакам, сопутствующим каждому множеству фотографий и отображаемых на странице наряду с другими элементами управления. Однако можно создать отдельную страницу с большим облаком, содержащим '''все теги''' системы вообще — чтобы иметь «общий вид».
== SQL для реализации идеи № 2 == А теперь вопрос: как реализовать средствами MySQL идею № 1№ 2? :)
Есть таблица-отношение <tt>'''tag_image'''</tt> с двумя полями «ID тега» (<tt>'''ti_tag'''</tt>) и «ID изображения» (<tt>'''ti_image'''</tt>). Каждая строчка означает, что фотография с соответствующим ID имеет соответствующий тег.
== 3D-облака тегов ==
Для [http://www.wordpress.org/ WordPress] существует плагин[http://wordpress.org/extend/plugins/wp-cumulus/ WP-Cumulus], отображающий в виде Flash-вставки трёхмерное вращающееся облако тегов.Flash-вставку можно утащить и приспособить для отображения облаков тегов в [[Vitaphoto]]. :-)
Пример:
</html>
== Выборка по тегам == Между прочим, следует задать и ещё один вопрос, кажущийся на первый взгляд тривиальным: а как вообще выбирать из базы фотографии, имеющие заданный набор тегов? Можно выделить два способа — первый выполняется быстрее на относительно небольших (меньше 8 тегов) наборах, второй лучше масштабируется относительно количества тегов в наборе. === По JOIN’у на тег === Добавляется по соединению на каждый тег набора, а так как все соединения — внутренние, они и фильтруют всё множество фотографий: <code-sql>SELECT i1.* FROM image i1JOIN tag_image ti1 ON ti1.ti_image=i1.img_id AND ti1.ti_tag=132JOIN tag_image ti2 ON ti2.ti_image=i1.img_id AND ti2.ti_tag=113JOIN 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 ti2WHERE ti2.ti_image=i2.img_id AND ti2.ti_tag IN (132, 113, 115) # набор теговGROUP BY i2.img_idHAVING COUNT(i2.img_id)=3 # количество тегов в наборе</code-sql> [[Категория:Архив]][[Категория:РазработкаSway]]