Вам следует разделить данные между двумя таблицами 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 не проверены.