Трябва да разделите данните си между две таблици, questions
и tags
и ги свържете с помощта на questions_tags
присъедини маса.
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
);
Не съм сигурен какво е count
колоната в оригиналната ви таблица е за, затова я пропуснах.
С помощта на горните таблици можете да използвате обединения, за да намерите всички въпроси с определен маркер или всички тагове на въпрос.
Редактиране
За да получите броя на всеки маркер, можете да направите нещо подобно:
SELECT tag,
count(*) AS c
FROM tags
GROUP BY tag;
Редактиране
За да получите броя на всички тагове за всички въпроси, направете следното:
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;
Ако искате само броят за конкретни маркери или въпроси, добавете допълнително WHERE
клаузи.
Забележка :Всички SQL по-горе не са тествани.