Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie speichert man Tags in einer Datenbank mit MySQL und PHP?

Sie sollten Ihre Daten auf zwei Tabellen aufteilen, questions und tags und verknüpfen Sie sie mit einem questions_tags Tabelle beitreten.

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

Ich bin mir nicht sicher, was der count ist Spalte in Ihrer ursprünglichen Tabelle ist für, also habe ich sie übersprungen.

Mithilfe der obigen Tabellen können Sie Joins verwenden, um alle Fragen mit einem bestimmten Tag oder alle Tags einer Frage zu finden.

Bearbeiten

Um die Anzahl für jedes Tag zu erhalten, könnten Sie etwa so vorgehen:

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

Bearbeiten

So erhalten Sie die Anzahl aller Tags für alle Fragen:

  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;

Wenn Sie nur die Zählung für bestimmte Tags oder Fragen wünschen, fügen Sie zusätzlich WHERE hinzu Klauseln.

Hinweis :Das gesamte obige SQL ist ungetestet.