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) |
Ещё раз, что такое актив, зачем оно? |
Актив - может быть материальным средством. К примеру "Бензопила", "Дрель", "Отвёртка". Каждому из них можно присвоить тег "Инструмент", к первым двум можно ещё добавить "Электроинструмент".