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

Hvordan gemmer man tags i en database ved hjælp af MySQL og PHP?

Du bør dele dine data mellem to tabeller, questions og tags og relatere dem ved hjælp af en questions_tags deltage i tabellen.

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

Jeg er ikke sikker på, hvad count kolonne i din oprindelige tabel er til, så jeg sprang den over.

Ved at bruge ovenstående tabeller kan du bruge joins til at finde alle spørgsmål med et bestemt tag eller alle tags for et spørgsmål.

Rediger

For at få optællingen for hvert tag kan du til noget som dette:

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

Rediger

For at få tællingen af ​​alle tags for alle spørgsmål skal du gøre dette:

  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;

Hvis du kun ønsker at tælle for specifikke tags eller spørgsmål, tilføj yderligere WHERE klausuler.

Bemærk :Al SQL ovenfor er utestet.



  1. Hvor lang er SHA256-hash?

  2. MYSQL join-resultater sæt slettede resultater under IN () i hvor-klausul?

  3. Bedste praksis for PHP/MySQL aftale/booking system

  4. Sådan dræber du en kørende SELECT-sætning