Есть таблица table: PHP: order_id value number user_id 1 aa 3 20 2 cc 5 30 Есть и работает обновление таблицы с помощью конструкции: PHP: $query = 'INSERT INTO `table` (`order_id`, `value`, `number`) VALUES '; //some code $query .= ' ON DUPLICATE KEY UPDATE order_id = VALUES(order_id), value = VALUES(value), number = VALUES(number)'; Данные, поступающие на вход, я не контролирую (они подгружаются с помощью ajax), поэтому пытаюсь добавить дополнительную проверку на правку пользователем только "своих" строк, т.е. проверку на соответствие order_id и user_id с помощью запроса: PHP: UPDATE 'table' SET 'value' = CASE `order_id` WHEN 1 THEN data_1 WHEN 2 THEN data_2 ELSE 'value' END, 'number' = CASE 'order_id' WHEN 1 THEN data_1 WHEN 2 THEN data_2 ELSE 'number' END WHERE order_id in (1,2) Прошу подсказать: 1) Можно ли сюда добавить второе проверочное условие AND user_id = $id (где $id=$_SESSION('user_id')) ? (В примерах в сети таких двойных условий не встречал). 2) При использовании подготовленных выражений синтаксис обычный для таких случав? (Массив переменных на вход $stmt->execute($arr)).
Иными словами ты по ajax получаешь данные и напрямую пишешь в базу и логику хочешь в запросе навернуть ? Может в пышке грузануть сущность, чекануть там всё что надо, а потом проапдейтить если че ?
Да, так и есть. Думал над тем, чтобы перед записью в базу эти же строки предварительно загрузить и проверить соответствие user_id и order_id. Но это лишний запрос, к тому же не самый быстрый, насколько я понимаю (SELECT ... IN). Получается, что "дешевле" все это сделать одним запросом UPDATE.
несколько сотен на высоконагруженной БД. Главный вопрос: зачем, если можно сделать одним запросом? Вы не в курсе, в этот UPDATE можно второе условие включить?