Проблему решил таким образом:$tags = $db->safesql( htmlspecialchars( strip_tags( stripslashes( trim( $_POST['tags'] ) ) ), ENT_COMPAT, $config['charset'] ) );
$tags = array_filter(array_map('trim', explode(',', $tags)));
$tags_box = array();
$all_post_tags = $db->super_query("SELECT tags.*, post_tags.* FROM " . PREFIX . "_tags tags LEFT JOIN " . PREFIX . "_post_tags post_tags ON (tags.id=post_tags.tag) WHERE post_tags.post_id=$post_id", true);
foreach($all_post_tags as $tag){
$tags_box["all_post_tags"][] = $tag["title"];
$tags_box["all"][$tag["title"]] = $tag["tag"];
if (!in_array($tag["title"], $tags)){
$tags_box["remove"][] = $tag["id"];
}
$tag["posi"]--;
$tags_box["upd_posi"] = ($tags[$tag["posi"]] == $tag["title"]) ? 0 : 1;
$tag["posi"]++;
$tags_box["upd_posi_indexes"][$tag["title"]] = $tag["posi"];
$tags_box["upd_posi_id"][] = $tag["id"];
}
$tag_id = 0;
foreach($tags as $tag_posi => $tag_title){
$tag_posi++;
$tag_id++;
if (!in_array($tag_title, $tags_box["all_post_tags"])){
$tags_box["insert_new_tags_title"][] = "('$tag_title')";
$tags_box["insert_new_tags_id"][] = $tag_title;
$tags_box["post_tags"][] = "('$post_id', '{$tag_id}', '$tag_posi')";
}
$tags_box["positions"][$tag_title] = $tag_posi;
if (isset($tags_box["upd_posi_indexes"][$tag_title])){
$tags_box["upd_posi_new"][] = $tags_box["upd_posi_indexes"][$tag_title];
}
}
if (!empty($tags_box["remove"])){
$db->query("DELETE FROM " . PREFIX . "_post_tags WHERE post_id='$post_id' AND tag REGEXP '[[:<:]]".implode('|', $tags_box["remove"])."[[:>:]]'");
}
if (!empty($tags_box["insert_new_tags_title"])){
$finded_tags = $db->super_query("SELECT * FROM " . PREFIX . "_tags WHERE title REGEXP '[[:<:]]" . implode('|', $tags_box["insert_new_tags_id"]) . "[[:>:]]'", true);
foreach($finded_tags as $tag){
if (in_array($tag["title"], $tags) && $tags_box["all"][$tag["title"]] != $tag["title"]){
$tags_box["finded"][] = "('$post_id', '{$tag["id"]}', '{$tags_box["positions"][$tag["title"]]}')";
}
}
if (!empty($tags_box["finded"])){
$db->query("INSERT INTO " . PREFIX . "_post_tags (post_id, tag, posi) VALUES " . implode(",", $tags_box["finded"]) . "");
}
else {
$db->query("INSERT INTO " . PREFIX . "_tags (title) VALUES " . implode(",", $tags_box["insert_new_tags_title"]) . "");
$db->query("INSERT INTO " . PREFIX . "_post_tags (post_id, tag, posi) VALUES " . implode(",", $tags_box["post_tags"]) . " ");
}
}
if ($tags_box["upd_posi"]){
$db->query("UPDATE " . PREFIX . "_post_tags SET posi = ELT(field(tag, ".implode(',', $tags_box["upd_posi_id"])."), ".implode(",", $tags_box["upd_posi_new"]).") WHERE tag REGEXP '[[:<:]]".implode('|', $tags_box["upd_posi_id"])."[[:>:]]' AND post_id=$post_id");
}
Буду признателен если кто-нибудь сообщит какую-нибудь альтернативу!