Система тегов, проверка, если тег уже существует или нет - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю в системе тегов с 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[])
        }

Как бы вы подошли к этому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...