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é.