Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przechowywać tagi w bazie danych za pomocą MySQL i PHP?

Powinieneś podzielić swoje dane między dwie tabele, questions i tags i powiąż je za pomocą questions_tags dołącz do stołu.

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

Nie jestem pewien, ile count kolumna w oryginalnej tabeli jest przeznaczona, więc ją pominąłem.

Korzystając z powyższych tabel, możesz użyć złączeń, aby znaleźć wszystkie pytania z określonym znacznikiem lub wszystkimi znacznikami pytania.

Edytuj

Aby uzyskać liczbę dla każdego tagu, możesz wykonać coś takiego:

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

Edytuj

Aby uzyskać liczbę wszystkich tagów dla wszystkich pytań, wykonaj następujące czynności:

  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;

Jeśli chcesz tylko liczyć dla określonych tagów lub pytań, dodaj dodatkowe WHERE klauzule.

Uwaga :Wszystkie powyższe instrukcje SQL nie zostały przetestowane.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Pobierz wartość wiersza z innej tabeli w zależności od wartości wiersza w tabeli

  2. Przewodnik po projektowaniu bazy danych dla ankiet i ankiet w MySQL

  3. Auto-inkrementacja MySQL na odrębną wartość wprowadzoną w innej kolumnie?

  4. Strategie zbiorczej aktualizacji SQLAlchemy

  5. Ile wpisów znajduje się w węźle B-drzewa indeksu MySQL?