MySQL ve PHP kullanarak bir veritabanı Etiketler Mağaza Nasıl?

3 Cevap php

Kullanıcıların soruları için girmek etiketleri saklamak ve daha sonra yayınlanan her soru için hepsini görüntüler bir veritabanı yaratmak istedim; burada SO gibi bir şey.

İşte şimdi benim için her şeyi yapar tablo:

CREATE TABLE questions_tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
url TEXT NOT NULL,
tag VARCHAR(255) NOT NULL,
count INT NOT NULL,
PRIMARY KEY (id)
);

Ben bu doğru değil biliyorum. Başka hangi tablo veya tablolar ihtiyacım var ve gerekirse ben bu tabloya değiştirmek için ne gerekiyor?

3 Cevap

Siz iki tablo, questions ve tags arasında veri bölünmüş ve bir questions_tags katılmak tablosunu kullanarak bunları ilgili olmalıdır.

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

Ben bu yüzden onu atlanır için özgün tabloda count sütun ne olduğundan emin değilim.

Eğer kullanabileceğiniz Yukarıdaki tabloları kullanarak belirli bir etiketi veya bir sorunun tüm etiketleri ile tüm soruları bulmak için katılır.

Edit

Eğer böyle bir şey olabilir her etiket için sayımını almak için:

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

Edit

Tüm sorular için tüm etiketleri sayıları elde etmek için bunu:

  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;

Eğer belirli etiketler veya sorularınız için yalnızca sayılmasını istiyorsanız ek WHERE maddeler eklemeye.

Note: Yukarıdaki tüm SQL denenmemiştir.

Tables:

CREATE TABLE questions_tags (
tag_id INT INT NOT NULL,
question_id INT NOT NULL,
);

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
tag VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);


SQL

Select the tag related to a question

SELECT     tag_id
FROM         question_tags
WHERE     question_id = $yourquestionid'

Select the questions related to a tag

SELECT     question_id
FROM         question_tags
WHERE     tag_id = $yourtagid'

Count how many times a tag has been used

SELECT COUNT(tag_id) 
FROM question_tags 
where tag_id=$yourtagid

Make a tag cloud

SELECT COUNT(tag_id)
FROM question_tags 
GROUP BY tag;

Senin "sorusuna" Tablo için ilişkilerini saklayan m ilişkisi tablo: Muhtemelen bir gerekir.