sql >> Database >  >> RDS >> Mysql

Hoe tags in een database op te slaan met MySQL en PHP?

U moet uw gegevens verdelen over twee tabellen, questions en tags en relateer ze met behulp van een questions_tags deelnemen aan tafel.

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

Ik weet niet zeker wat de count kolom in je originele tabel is voor, dus ik heb het overgeslagen.

Met behulp van de bovenstaande tabellen kun je joins gebruiken om alle vragen met een bepaalde tag of alle tags van een vraag te vinden.

Bewerken

Om de telling voor elke tag te krijgen, zou je zoiets als dit kunnen doen:

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

Bewerken

Ga als volgt te werk om de tellingen van alle tags voor alle vragen te krijgen:

  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;

Als je alleen de telling voor specifieke tags of vragen wilt, voeg dan extra WHERE toe clausules.

Opmerking :Alle bovenstaande SQL is niet getest.



  1. Verken SQL Server Restore Database met opties voor herstel versus geen herstel

  2. Top n procent top n%

  3. Wachtwoord is niet geverifieerd met de functie password_verify

  4. Kolom Afhankelijk van andere kolom