Вы можете сгенерировать запрос следующим образом:
UPDATE tasks_tbl SET task=1 WHERE
(user_id=16 AND date='2010-05-05') OR
(user_id=17 AND date='2010-02-22')
Есть хаки, которых следует избегать использования (... and ...) or (... and ...)
конструкций (объединение полей и параметров: "concat(user_id, date) = '". $user_id. $date. "'"
, но они работают немного медленнее.
Код PHP:
for ($i = 0; !empty($_POST['update'. $i]; $i++)
if (intval($_POST['task'.$i]) == 1)
$cond[] = '(user_id='. intval($_POST['user_id'. $i]).
' and date=\''. mysql_real_escape_string($_POST['date'.$i]). '\')';
$query = 'UPDATE tasks_tbl SET task=1 WHERE '. implode(' OR ', $cond). ')';
Редактировать: Я не совсем понимаю, почему вам нужно сделать это в одном запросе. Сколько значений может иметь task
? 1, 2, 3 или еще много? С 3 значениями вы можете использовать вложенные функции IF(...)
:
UPDATE tasks_tbl SET task=if('. <imploded tasks with value 1>. ', 1, if('.
<tasks with value 2>. ', 2, if('. <tasks with 3>. ', 3,
task))) /* leave as is otherwise */
Или вы можете поместить простой цикл в код, который я дал:
for ($j = 1; $j <= 3; $j++)
for ($i = 0; !empty($_POST['update'. $i]; $i++)
if (intval($_POST['task'.$i]) == 1)
$cond[] = '(user_id='. intval($_POST['user_id'. $i]).
' and date=\''. mysql_real_escape_string($_POST['date'.$i]). '\')';
mysql_query('UPDATE tasks_tbl SET task=1 WHERE '. implode(' OR ', $cond). ')');