2014-02-12 2 views
2

Рассмотрим таблицу задачиПоиск идентификаторов в разделенных запятыми строку с входом, разделенных запятыми

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 

Я хочу получить все строки из таблицы, соответствующие «assign_to» или «зрителей» со строки ввода ING. Я попытался с IN() для "assigned_to",

SELECT * FROM tasks WHERE assign_to IN ($inputString) 

но не мог получить какое-либо решение в соответствии с колонкой "зрителей".

Есть ли способ сопоставления строки, разделенной запятыми, с другой разделенной запятой строкой?

Заранее спасибо

+3

NORMALIZE ваша база данных –

+1

эта задача была бы намного проще, если бы вы могли реорганизовать структуру своей базы данных: наличие «нескольких значений в одном столбце одной строки» в «реляционной базе данных» обычно считается плохой практикой; 'зрители' должны действительно находиться в отдельной таблице и ссылаться только через внешний ключ; которая представила бы новую таблицу «TaskViewers», которая имеет только два столбца «TaskId» и «ViewerId», затем вы можете присоединиться к этой таблице с этой таблицей задач, как «задачи SELECT». FROM tasks 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 

Это не очень эффективным, но будет делать задачу.

Смежные вопросы