Bạn nên tách dữ liệu của mình giữa hai bảng, questions
và thẻ tags
và liên hệ chúng bằng cách sử dụng questions_tags
tham gia bảng.
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
);
Tôi không chắc count
là bao nhiêu cột trong bảng ban đầu của bạn là dành cho nên tôi đã bỏ qua.
Sử dụng các bảng trên, bạn có thể sử dụng các phép nối để tìm tất cả các câu hỏi có một thẻ nhất định hoặc tất cả các thẻ của một câu hỏi.
Chỉnh sửa
Để có được số lượng cho mỗi thẻ, bạn có thể làm như sau:
Thẻ SELECT tag,
count(*) AS c
FROM tags
GROUP BY tag;
Chỉnh sửa
Để nhận được số lượng tất cả các thẻ cho tất cả các câu hỏi, hãy làm như sau:
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;
Nếu bạn chỉ muốn số lượng cho các thẻ hoặc câu hỏi cụ thể, hãy thêm WHERE
mệnh đề.
Lưu ý :Tất cả SQL ở trên đều chưa được kiểm tra.