U moet uw gegevens verdelen over twee tabellen, questions
en tags
en relateer ze met behulp van een questions_tags
deelnemen aan tafel.
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
);
Ik weet niet zeker wat de count
kolom in je originele tabel is voor, dus ik heb het overgeslagen.
Met behulp van de bovenstaande tabellen kun je joins gebruiken om alle vragen met een bepaalde tag of alle tags van een vraag te vinden.
Bewerken
Om de telling voor elke tag te krijgen, zou je zoiets als dit kunnen doen:
SELECT tag,
count(*) AS c
FROM tags
GROUP BY tag;
Bewerken
Ga als volgt te werk om de tellingen van alle tags voor alle vragen te krijgen:
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;
Als je alleen de telling voor specifieke tags of vragen wilt, voeg dan extra WHERE
toe clausules.
Opmerking :Alle bovenstaande SQL is niet getest.