2013-10-15 36 views
2

我有這樣的場景,我的MySQL數據庫: enter image description here選擇列,其中值列有多個數據分離逗號

我需要選擇行,其中標籤是用PHP-MySQL查詢URL參數(GET):

$tag = $_GET['tag']; 
// example $tag = 1 
// now I need select rows where in tags colums is value 1. 

如何獲取此查詢?我認爲我需要創建一個數組...但我不知道該怎麼做。提前致謝!

+2

最好的辦法是你一定要規範你的數據庫;否則[FIND_IN_SET()](http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_find-in-set) –

+0

你是什麼意思的規範化我的數據庫?你能舉個例子嗎? –

+1

我的意思是使用team_tags表,包括TEAM_ID和TAG_ID列,一個行,並與您的團隊相關聯的每個標籤 - 按d Mac的答案 –

回答

2

不要這樣做 - 它會在每次查詢之前爲您造成麻煩,直到您修復它爲止。

相反,使標籤表,並使用許多一對多的關係,團隊的標籤聯繫起來。

例如

CREATE TABLE tag (
    id int not null auto_increment primary key, 
    name varchar(100), 
    description varchar(255)); 

CREATE TABLE teamtag (
    team_id int, 
    tag_id int, 
    CONSTRAINT 'team_fk' FOREIGN KEY (team_id) REFERENCES team ('id'), 
    CONSTRAINT 'tag_fk' FOREIGN KEY (tag_id) REFERENCES tag ('id')); 
+1

而且使'team_id'用'tag_id'作爲主鍵。 –

+0

是的,完全是@ElonThan。接得好。 –

4

你可以使用LIKE/FIND_IN_SET這樣做,但你絕對不應該這樣做。

而是考慮改變架構和加入字典表,以保持所有的標籤和連接表,以保持標籤和項目之間的所有連接。

0
SELECT * FROM `table` WHERE FIND_IN_SET(`Tags`, '$tag') > 0; 
相關問題