[英]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)
);
我知道這不對。 我還需要哪些其他表格,如果需要,我需要更改哪個表格?
您應該在兩個表, questions
和tags
之間拆分數據,並使用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.