Духовность™
Продвинутый новичок
Вставка записей без наличия ID - проблема с реализацией
Привет.
Прошу прощения за возможно, банальные вопросы.
Суть такова - к статье нужно сделать добавление ключевых слов (тегов).
Слова добавляются через текстовое поле, через запятую.
Посему при каждом посте нужно проверять наличие таких слов в таблице слов, в зависимости от наличия, либо вставлять их в таблицу, либо возвращать ID слова, после чего проверять наличие связки в таблице связей статья-слово
Меня смущает моя реализация. Процесс при посте сейчас происходит примерно следующий:
вот собственно... меня что смущает - количество запросов к СУБД. Например, если будет 5 слов указано, нужно сделать 15 запросов! Это как вообще, нормально?
Привет.
Прошу прощения за возможно, банальные вопросы.
Суть такова - к статье нужно сделать добавление ключевых слов (тегов).
Слова добавляются через текстовое поле, через запятую.
Посему при каждом посте нужно проверять наличие таких слов в таблице слов, в зависимости от наличия, либо вставлять их в таблицу, либо возвращать ID слова, после чего проверять наличие связки в таблице связей статья-слово
Меня смущает моя реализация. Процесс при посте сейчас происходит примерно следующий:
PHP:
$keywords = explode(',', $_POST['article_keywords']);
clearRequest($keywords);
$keywords = array_unique($keywords);
foreach ($keywords as $word)
{
if (!$word) {
continue;
}
// Смотрим, есть ли такое слово в таблице слов
$res = $db->query('SELECT id_word FROM articles_keywords WHERE word = "?"', $word);
// Слова такого нет - вставляем новую заапись
if (!$id_word = $res->getOne())
{
$db->query('INSERT INTO articles_keywords VALUES(NULL, "?")', $word);
$id_word = $db->getInsertId();
}
// Проверяем наличие записи связи в таблице статья-слово
$res = $db->query('SELECT
id
FROM
article_keywords_centre
WHERE
id_article = ?
AND
id_word = ?', $id_article, $id_word);
// Связи ещё нет - создаем
if (!$id_centre = $res->getOne())
{
$res = $db->query('INSERT INTO article_keywords_centre VALUES(NULL, ?, ?)', $id_article, $id_word);
}
}