Powinieneś podzielić swoje dane między dwie tabele, questions
i tags
i powiąż je za pomocą questions_tags
dołącz do stołu.
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
);
Nie jestem pewien, ile count
kolumna w oryginalnej tabeli jest przeznaczona, więc ją pominąłem.
Korzystając z powyższych tabel, możesz użyć złączeń, aby znaleźć wszystkie pytania z określonym znacznikiem lub wszystkimi znacznikami pytania.
Edytuj
Aby uzyskać liczbę dla każdego tagu, możesz wykonać coś takiego:
SELECT tag,
count(*) AS c
FROM tags
GROUP BY tag;
Edytuj
Aby uzyskać liczbę wszystkich tagów dla wszystkich pytań, wykonaj następujące czynności:
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;
Jeśli chcesz tylko liczyć dla określonych tagów lub pytań, dodaj dodatkowe WHERE
klauzule.
Uwaga :Wszystkie powyższe instrukcje SQL nie zostały przetestowane.