[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с тегами в базе.
plazmagod
В общем делаю теги на сайте, наподобие ливжорнала. Цель - массив тегов сравнить наличие в табличке тегов, записать связь с активом. Есть три таблицы:

1. tag(id (AUTO_INCREMENT), caption) // Теги
2. asset(id (AUTO_INCREMENT), caption) // Активы
3. link_asset_tag(asset_id, tag_id) // Связь активов с тегами.


foreach($arr_tags as $arr_tags_key => $arr_tag)
{
$tag_caption = $arr_tag;
$asset_id = $a['id'];
$res_a_t = mysqlQuery("SELECT id FROM tag WHERE caption='".$tag_caption."'");
// Если такой тег существует, то просто пишем его ИД и ИД актива в таблицу link_asset_tag
if(mysql_num_rows($res_a_t)>0)
{
$tag = mysql_fetch_assoc($res_a_t);
$res = mysql_num_rows(mysqlQuery("SELECT * FROM link_asset_tag WHERE tag_id=".$tag['id']." AND asset_id=".$asset_id));
if(!$res)
{
mysqlQuery("INSERT INTO link_asset_tag SET tag_id=".$tag['id'].", asset_id=$asset_id");
}
}

// Если такого тега нет:
else
{
mysqlQuery("INSERT INTO tag SET caption='".$tag_caption."'");
mysqlQuery("INSERT INTO link_asset_tag SET tag_id='".mysql_insert_id()."', asset_id=$asset_id");
}
}



Можно ли сделать проще, красивше, переложить обработку на MySQL, уменьшить количество запросов?

UPD: И ещё момент. При удалении связи тега с активом, то есть когда в связи он есть а во входном массиве его нет, придётся выбирать все связи по активу и сверять с удалением. Может как-то объединить это дело? Или проще удалять все связи по активу и закидывать новые?



Спустя 6 минут, 10 секунд (20.06.2011 - 10:48) linker написал(а):
Что есть актив?

Спустя 3 минуты, 36 секунд (20.06.2011 - 10:51) plazmagod написал(а):
Цитата (linker @ 20.06.2011 - 07:48)
Что есть актив?

Актив - запись в таблице, имеющая ID (AUTO_INCREMENT) и поле (TINYTEXT).

Спустя 5 минут, 4 секунды (20.06.2011 - 10:56) linker написал(а):
Ещё раз, что такое актив, зачем оно?

Спустя 17 минут, 50 секунд (20.06.2011 - 11:14) plazmagod написал(а):
Цитата (linker @ 20.06.2011 - 07:56)
Ещё раз, что такое актив, зачем оно?

Актив - может быть материальным средством. К примеру "Бензопила", "Дрель", "Отвёртка". Каждому из них можно присвоить тег "Инструмент", к первым двум можно ещё добавить "Электроинструмент".
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.