2011-09-16 55 views
0

每篇文章可以有無限類別。MySQL中的數組選擇列表

類別是這樣

示例article_category保存在數據庫中: '1', '3', '8'

OR

例如article_category: '2', '3'

所以,當我在搜索列表,讓說,3類

$category_id = $_REQUEST['category_id']; //3 
$SQL = "SELECT * FROM ARTICLES WHERE article_category = '$category_id'"; 

如果它只是一個上述將工作正常。

我討厭這樣說,但我完全失去了......我會用IN嗎?

+1

@邁克爾:直接在您的SQL查詢請勿使用'$ _REQUEST'值。你應該[轉義](http://php.net/manual/en/function.mysql-real-escape-string.php)或使用[PDO](http://php.net/manual/en/book .pdo.php)。 –

+0

@Einacio我沒有得到任何好的迴應。我可能會問我的問題錯誤 – MHowey

+1

@火箭這是我的要求,但我不認爲我需要顯示完整的請求。$ new_keyword = htmlspecialchars($ _ REQUEST [「new_keyword」],ENT_QUOTES); \t $ new_keyword = preg_replace(「/ [^ 0-9] /」,「」,$ new_keyword); – MHowey

回答

1

=(等於)檢查完整的字符串。你想這樣做可能會使用像和%comodin來完成(它像*的文件中dir等)

$SQL = "SELECT * FROM ARTICLES WHERE article_category LIKE \"%'$category_id'%\""; 

然而什麼,我reccommend你將數據庫規範化,並有類別的子表

+0

關於like的問題。如果我有'1','3','8','33想拿起3和33? – MHowey

+0

我忘了在裏面加入註釋引號。我會編輯 – Einacio

1

我要實現這一點的方法是創建一個表,可能已經有了類別。例如:

cat_id cat_name 
1   animals 
2   sports 
3   locations 

然後創建一個表來將文章鏈接到類別。例如:

table artcat 
article_id cat_id 
1    1 
1    3 
2    1 
2    2 
2    3 

上表基本上替換了您當前擁有的字段article_category。在上面的例子

article 1 is linked to categories 1 and 3 
article 2 is linked to categories 1, 2 and 3 

而當你需要讓所有的物品給定類別,你可以運行類似的查詢:

SELECT article_id FROM artcat WHERE cat_id=3 

你甚至可以做到與文章的數據庫聯接輸出文章標題,如果你願意。

我希望這會有所幫助。祝你好運!

0

您可以在這裏使用FIND_IN_SET,但它可能不是非常有效。我建議你改變你的表格結構並遵循@jdias的答案。

如果爲1,2,3article_category保存:

$SQL = "SELECT * FROM ARTICLES WHERE FIND_IN_SET('$category_id', article_category)"; 

或者如果它保存爲'1','2','3'

$SQL = "SELECT * FROM ARTICLES WHERE FIND_IN_SET('\'$category_id\'', article_category)"; 
+0

這正是我正在尋找的。完美的作品。非常感謝你。 – MHowey

+0

不客氣。 :-) –