2014-02-12 263 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 

這是不是很有效,但會做的任務。