sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo almacenar etiquetas en una base de datos usando MySQL y PHP?

Debe dividir sus datos entre dos tablas, questions y tags y relacionarlos usando un questions_tags unirse a la mesa.

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
);

No estoy seguro de cuánto count la columna de la tabla original es para, así que la omití.

Usando las tablas anteriores, puede usar uniones para encontrar todas las preguntas con una determinada etiqueta o todas las etiquetas de una pregunta.

Editar

Para obtener el recuento de cada etiqueta, podría hacer algo como esto:

  SELECT tag,
         count(*) AS c
    FROM tags
GROUP BY tag;

Editar

Para obtener los recuentos de todas las etiquetas de todas las preguntas, haga lo siguiente:

  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;

Si solo desea el recuento de etiquetas o preguntas específicas, agregue WHERE adicional cláusulas.

Nota :Todo el SQL anterior no ha sido probado.