2014-02-12 265 views
2

考虑表任务搜索逗号IDS分隔字符串以逗号分隔字符串

id | assigned_to | viewers 
1 100   100,200,300 
2 200   125,200,310 
3 300   175,250,300 
4 400   400,440,670 
5 500   500,111,333 

输入我会得到一个输入字符串可能包含超过1000个逗号分隔值,如

1,2,3,4,5,6,7,8,,,,100,,,,500,,,,1000 

我想从表中匹配“assigned_to”或“查看者”的所有行从输入str ING。我曾与IN()尝试了 “assigned_to”,

SELECT * FROM tasks WHERE assign_to IN ($inputString) 

但当时无法得到任何的解决方案,以配合 “观众” 一栏。

有什么办法可以将逗号分隔的字符串与另一个逗号分隔的字符串进行匹配吗?

在此先感谢

+3

NORMALIZE你的数据库 –

+1

如果你可以重构你的数据库结构,那么这个任务会容易得多:在关系数据库中'在一行中的一列中有多个值'通常被认为是不好的做法; '查看者'应该真的在一个单独的表中,并只通过外键引用;这将引入一个新表TaskViewers,只有两列TaskId和ViewerId,然后你可以像SELECT任务那样将该表加入到该表中。FROM任务INNER JOIN taskviewers ON tasks.id = taskviewers.taskid WHERE tasks.assign_to IN($ inputString)或taskviewers.viewerid IN($ inputString)' – DrCopyPaste

+2

mysql FIND_IN_SET –

回答

0

你可以试试下面的代码:

$str = "SELECT * FROM tasks WHERE assign_to IN ($inputString) "; 
$values = explode(",",$inputString); 
foreach ($values as $val) { 
    $str .= "AND viewers LIKE ".$val; //Replace AND with OR as per your requirement (Match all/ match any) 
} 

//execute query 

这是不是很有效,但会做的任务。