簡體   English   中英

如何使用MySQL和PHP在數據庫中存儲標簽?

[英]How To Store Tags In A Database Using MySQL and PHP?

我想創建一個數據庫,用於存儲用戶為其問題輸入的標簽,然后針對發布的每個問題顯示所有標簽; 就像這里的東西一樣。

這是現在為我做的一切表:

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

我知道這不對。 我還需要哪些其他表格,如果需要,我需要更改哪個表格?

您應該在兩個表, questionstags之間拆分數據,並使用questions_tags連接表將它們關聯起來。

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

我不確定原始表中的count列是什么,所以我跳過了它。

使用上面的表格,您可以使用聯接來查找具有特定標記或問題的所有標記的所有問題。

編輯

為了獲得每個標簽的計數,你可以這樣:

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

編輯

要獲得所有問題的所有標記的計數,請執行以下操作:

  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;

如果您只想要特定標簽或問題的計數,請添加其他WHERE子句。

注意 :上面的所有SQL都是未經測試的。

表:

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     tag_id
FROM         question_tags
WHERE     question_id = $yourquestionid'

選擇與標簽相關的問題

SELECT     question_id
FROM         question_tags
WHERE     tag_id = $yourtagid'

計算標簽使用次數

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

制作標簽雲

SELECT COUNT(tag_id)
FROM question_tags 
GROUP BY tag;

你可能需要一個:m關系表,它將關系存儲到你的“問題”-Table中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM