Добрый вечер.
Есть 2 таблицы:
tags &
post_tags.
Я знаю лишь 2 способа записывать теги в базу:
1$tags = array_map('trim', explode(',', $_POST["tags"])); // A,B,C,
$tags_array = array();
$tags_sql = $db->super_query("SELECT id, title FROM `tags` WHERE title REGEXP '[[:<:]]" . implode('|', $tags) . "[[:>:]]'", true);
foreach($tags_sql as $tag){
$tags_array[$tag["title"]] = $tag["id"];
}
foreach($tags as $tag) {
$tag = trim($tag);
if (isset($tags_array[$tag])){
$db->query("INSERT INTO `post_tags` (post_id, tag) VALUES ('$post_id', '{$tags_array[$tag]}') ");
}
else {
$db->query("INSERT INTO `tags` (title) VALUES ('$tag') ");
$id = $db->insert_id()-1;
$id++;
$db->query("INSERT INTO `post_tags` (post_id, tag) VALUES ('$post_id', '$id') ");
}
}
2$tags = array_map('trim', explode(',', $_POST["tags"])); // A,B,C,
$tags_array = array();
$tags_sql = $db->super_query("SELECT id, title FROM `tags` WHERE title REGEXP '[[:<:]]" . implode('|', $tags) . "[[:>:]]'", true);
foreach($tags_sql as $tag){
$tags_array[$tag["title"]] = $tag["id"];
}
$gg_tags = array();
foreach($tags as $tag) {
$tag = trim($tag);
if (isset($tags_array[$tag])){
$gg_tags["exist"][] = "('$post_id', '{$tags_array[$tag]}')";
}
else {
$gg_tags["new_title"][] = "('$tag')";
}
}
if (!empty($gg_tags["exist"])){
$db->query("INSERT INTO `_post_tags` (post_id, tag) VALUES " . implode(",", $gg_tags["exist"]) . " ");
}
else {
$db->query("INSERT INTO `tags` (title) VALUES " . implode(",", $gg_tags["new_title"]) . " ");
$tags_sql = $db->super_query("SELECT id, title FROM `tags` WHERE title REGEXP '[[:<:]]" . implode('|', $tags) . "[[:>:]]'", true);
foreach($tags_sql as $tag){
$gg_tags["new_id"][] = "('$post_id', '{$tag["id"]}')";
}
$db->query("INSERT INTO `post_tags` (post_id, tag) VALUES " . implode(",", $gg_tags["new_id"]) . " ");
}
В итогде, в таблице должно получиться такое:
tags
id | title
1 | A
2 | B
3 | C
post_tags
post_id | tag
1 | 1
1 | 2
1 | 3
- вариант не хотелось бы использовать и за того что делаются много запросов, а по мимо тегов есть еще много таблиц для которых нужна такая же конструкция.
- вариант не уверен что правильный. Если все-же он правильный я не уверен что это самый оптимальный вариант даже если с ним получаются меньше запросов (по моим расчетам).
Я не знаю правильно ли я пытаюсь сделать или нет, эти 2 варианта единственные или есть и другие ?
Буду признателен за советы - помощь!