Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como armazenar tags em um banco de dados usando MySQL e PHP?


Você deve dividir seus dados entre duas tabelas, questions e tags e relacioná-los usando um questions_tags juntar tabela.
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
);

Não tenho certeza de qual é a count coluna em sua tabela original é para então eu a ignorei.

Usando as tabelas acima, você pode usar junções para encontrar todas as perguntas com uma determinada tag ou todas as tags de uma pergunta.

Editar

Para obter a contagem de cada tag, você pode fazer algo assim:
  SELECT tag,
         count(*) AS c
    FROM tags
GROUP BY tag;

Editar

Para obter as contagens de todas as tags para todas as perguntas, faça o seguinte:
  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;

Se você quiser apenas a contagem de tags ou perguntas específicas, adicione WHERE adicional cláusulas.

Observação :Todo o SQL acima não foi testado.