web-dev-qa-db-fra.com

K2 Ajouter une balise à l'article si le mot clé est dans le titre de l'article

Cela semble être un peu en dehors de ma ligue et de ma connaissance de MySQL. Donc, si quelqu'un peut aider, ce serait très apprécié.

Je voudrais faire ce qui suit:

  1. Entrez/définissez un mot clé, par exemple. mercedes
  2. Trouver tous les articles K2 qui ont ce mot-clé dans le titre
  3. Ensuite, à chacun de ces articles, associez mon mot clé mercedes en tant que balise.

Maintenant ... Il y a trois tables avec les colonnes pertinentes listées:

k2_items

id, title

k2_tags

id, name, published (la valeur 1 est attribuée si la balise est publiée)

k2_tags_xref

id, tagID, itemID

Donc, la requête doit sélectionner tous les éléments de la table k2_items Qui ont pour titre keyword, vérifiez si keyword est déjà défini comme tag dans k2_tags, sinon créer une nouvelle balise. Après cela, une nouvelle entrée k2_tags_xref Doit être générée pour connecter la balise keyword à l'article K2.

Je n'avais toujours pas de cours de base de données sur mon université, je suis donc un peu en dehors de ma ligue avec celle-ci, et c'était supposé être juste une simple retouche pour le site que je développe.

Toute aide à cet égard serait très appréciée, et je suis sûr que cela aidera la communauté plus tard.

Merci!

5
Reygoch

Il y a quelques requêtes que vous devez exécuter. S'il vous plaît utiliser ces requêtes d'abord sur un environnement de test. Il y a une idée:

/* Query 1: Select the id of the tag */ 
SELECT id FROM `#__k2_tags` WHERE `name` = 'mercedes' LIMIT 1;

/* Query 2: If previous query returned null, create a new tag */
INSERT INTO `#__k2_tags`
SET `name` = 'mercedes',
`published` = 1;

/* Query 3: Use this to get the last id or use id from Query 1 */
SELECT LAST_INSERT_ID();

/* Query 4: Insert tags for each article that contains in the title the Word mercedes */
INSERT INTO `#__k2_tags_xref` (`tagID`,`itemID`)
(
    SELECT DISTINCT 'YOUR_TAG_ID', i.id
    FROM `#__k2_items` AS i
    WHERE LOCATE('mercedes', title) > 0
)
2
Valentin Despa