你应该将数据拆分为两个表,
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未经测试。