2013-10-15 31 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;