Я работаю в системе тегов с PhP и MySQL (InnoDB). В моей базе данных есть 2 таблицы:
contentTable
:
content
| tagsID
"content1" | "1, 3"
"content2" | «2, 3»
tags
:
tagID
(PrimaryKey) | tag
1 | "политика"
2 | "интервью"
3 | "economy"
Каждый контент имеет набор тегов, перечисленных в tagID для каждого tagID.
Я пытаюсь сделать вставку. php для добавления нового контента. Перед добавлением контента каждый тег проверяется, чтобы убедиться, что он существует:
- , если этого не происходит, он добавляет его в таблицу тегов и получает свой первичный ключ (
tagID
) - если он уже существует, он получает его
tagID
.
tagsID [], который на каждой итерации заполняется идентификатором каждого тега и затем объединяется ('$ tagID1.', '. $ tagID2 et c .. ') для хранения в tagsID
из contentTable
.
Код, который я сделал, я считаю: неэффективный, плохо спроектированный, непродуктивный.
$tags = $_POST['tags'];
$tags = explode(", ", $tags);
foreach ($tags as $i => $tag ) {
$req = $bdd-> prepare("SELECT tagID FROM tags WHERE tag = ?");
$req->execute(array($tag));
while ($tagID = $req->fetch())
{
if (empty($tagID['tagID'])) {
// create the tag (INSERT VALUES("", $tag))
// get the ID of the new tag
// add it to $tagsID[]
echo $tag . ' tag added, ID : ' . $newTagID . '<br>';
} else {
// $tagID['tagID'] is added to $tagsID[]
}
}
// JOIN string of $tagsID array in this format tagsID[0] . ", " . tagsID[1] . ", " etc...
INSERT VALUES ($content, $tagsID[])
}
Как бы вы подошли к этому?