2010-08-05 138 views
2

我目前正在開發自己的博客系統。目前,當您創建新帖子時,您可以選擇將其歸檔爲您自己的選擇類別。MySQL存儲和搜索字符串

目前,我將類別作爲VARCHAR值存儲在mysql數據庫中。作爲一個例子,字段將包含2,4,8,如果用戶選擇了與ID的類別:2,4和8

要檢索與ID 4的類別的博客文章然後我使用:

SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,',')) 

我已經被告知用小數點逗號分隔的數值對於良好的數據庫結構來說是一個不好的(非常糟糕的)!

任何人都可以爲我提供一個很好的方法/技巧,使之成爲最有效的方法嗎?

在此先感謝

回答

1

靈活&強大的設置,如SO張貼了很多次:

POSTS 
id 
name 
text 

CATEGORIES 
id 
name 

POST_CATEGORIES 
post_id 
category_id 

在當前的查詢是:

SELECT p.id, p.name, p.text 
FROM posts p 
JOIN post_categories pc 
ON pc.post_id = p.id 
AND pc.category_id = 4; 
0

查找到關係數據庫正常化。對於您的特定情況,除了您的博客內容表格之外,還可以考慮另外創建2個表格,類別和BlogCategories。類別包含所有標籤/類別的定義,而不包含其他內容。 BlogCategories表是一個多對多的交叉引用表,可能在你的情況下只包含對Blog表的外鍵引用和對Categories表的外鍵引用。這允許1個博客條目與多個類別和1個類別相關聯以與多個博客條目相關聯。

在最差的情況下獲取數據不會比3表連接更困難,而且您將脫離子串業務來確定您的業務邏輯。