Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment stocker des balises dans une base de données à l'aide de MySQL et PHP ?

Vous devez diviser vos données entre deux tables, questions et tags et reliez-les à l'aide d'un questions_tags joindre la table.

CREATE TABLE questions (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  url TEXT NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE tags (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  tag VARCHAR(255) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE questions_tags (
  question_id INT UNSIGNED NOT NULL REFERENCES questions,
  tag_id INT UNSIGNED NOT NULL REFERENCES tags
);

Je ne sais pas ce que le count colonne dans votre tableau d'origine est pour donc je l'ai ignoré.

En utilisant les tableaux ci-dessus, vous pouvez utiliser des jointures pour trouver toutes les questions avec une certaine balise ou toutes les balises d'une question.

Modifier

Pour obtenir le nombre de chaque balise, vous pouvez faire quelque chose comme ceci :

  SELECT tag,
         count(*) AS c
    FROM tags
GROUP BY tag;

Modifier

Pour obtenir le nombre de tous les tags pour toutes les questions, procédez comme suit :

  SELECT t.tag,
         q.question_id,
         count(*) AS c
    FROM tags AS t,
         questions_tags AS qt
         questions AS q
   WHERE t.id = qt.tag_id
     AND qt.question_id = q.id         
GROUP BY t.id, q.id;

Si vous souhaitez uniquement le nombre de balises ou de questions spécifiques, ajoutez WHERE supplémentaire clauses.

Remarque  :Tout le code SQL ci-dessus n'a pas été testé.