Mysql
 sql >> Database >  >> RDS >> Mysql

Come memorizzare i tag in un database utilizzando MySQL e PHP?

Dovresti dividere i tuoi dati tra due tabelle, questions e tags e relazionali usando un questions_tags unisciti al tavolo.

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

Non sono sicuro di cosa count la colonna nella tabella originale è per quindi l'ho saltata.

Utilizzando le tabelle precedenti puoi utilizzare i join per trovare tutte le domande con un determinato tag o tutti i tag di una domanda.

Modifica

Per ottenere il conteggio per ogni tag potresti fare qualcosa del genere:

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

Modifica

Per ottenere il conteggio di tutti i tag per tutte le domande, procedi come segue:

  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 vuoi solo il conteggio per tag o domande specifici aggiungi ulteriore WHERE clausole.

Nota :Tutto l'SQL sopra non è stato testato.