2013-07-31 49 views
0

我想創建一個BLOG並創建兩個表。MySQL LIKE給出錯誤結果

ID  Name of Category 

我創建了文章表。

ID CATEGORY_ID ARTICLE 

我將每篇文章添加到多個類別中,並將ID保存爲CATEGORY_ID字段中的逗號分隔值。即

ID CATEGORY_ID Article 
1  1,2,3   xyz 

2  1,5   ghjy.............. 

3  2,4,6   hgyr.............. 

現在我想在類別頁面上發佈文章。

$QUERY = "SELECT * FROM article_table WHERE category_id like '%category_id%' ORDER BY id DESC"; 

在上面的查詢中一切都很好,直到有兩個相同的類別。 類別20,21,22,23等所有的文章也出現在2的類別頁面。我該如何避免這種情況。 '% - %'正在導致問題。

我的問題:我希望動態顯示不同類別的文章。

任何人都可以幫助嗎?

+0

您使用的是mysql_ *還是PDO或mysqli? –

+1

修復數據結構,以便您擁有一個article_category關聯表。不要將列表存儲爲逗號分隔值。 –

+0

使用regexp而不是像 – vidyadhar

回答

0

如果你正在使用MySQL,你可以使用FIND_IN_SET功能看,如果你想找到類別存在

嘗試:

SELECT * FROM article_table WHERE FIND_IN_SET('searchForId', category_id) > 0 ORDER BY id DESC; 

其中「searchForId」被替換類別ID你'尋找

+0

謝謝你的回答。我也在很多地方看到了這一點,但在我的情況下,這是行不通的。它只找到了發生的地方,但沒有給出肯定的答案。 –

+0

謝謝。我得到了答案。實際上,在添加數據時,我留下了像1,2,3,4這樣的值之間的空格,因此FIND_IN_SET沒有得到結果。 現在我刪除空間1,2,3,4,5和查詢工作... –

0

我建議你的表正常化。你在這裏真正擁有的是一個一對多的關係,擠在一張桌子上。你的文章表可以簡化爲一個ID和內容

ID Article 
1  xyz 

2  ghjy.............. 

3  hgyr.............. 

,然後創建一個第二個表來保存分類

ARTICLE_ID CATEGORY_ID 
1    1 
1    2 
1    3 

2    1 
2    5    

3    2 
3    4 
3    6 

假設你的名字第二個表article_category_map查詢然後將:

SELECT a.ID, acm.CATEGORY_ID, acm.Article 
FROM article_category_map acm 
inner join article_table a on acm.ARTICLE_ID = a.ID 
WHERE acm.CATEGORY_ID = %category_id% 
ORDER BY a.id DESC