@maryaTurova

Как поменять одним запросом в таблице sql?

Данным кодом в цикле добавляю в массив и обновляю значение в колонке
include ("bd.php");
		
		mysqli_query($db,"DELETE FROM `pictures` WHERE (`date` < DATE_SUB(NOW(),INTERVAL 1 MINUTE))");
		
		$response = [];
		$count = 1;
		$result = mysqli_query(
			$db,"SELECT `set_json`,`hash` FROM `pictures` WHERE `result`='WAITING'"
			);
			
		while ($row = mysqli_fetch_array($result)) {
			$response[$count]= json_encode(unserialize($row[0]));
			$count +=1;
			mysqli_query ($db,"UPDATE `pictures` SET `result`='PROCESS' WHERE `hash`='$row[1]'");
		}
		echo json_encode($response);

Имеются ли варианты обойтись без перебора?
Или может можно одним запросом поменять значения во всех колонках?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
//..

$hash_list = [];

while ($row = mysqli_fetch_array($result)) {
      $response[$count]= json_encode(unserialize($row[0]));
      $count +=1;

      //собираем все hash в один список
      $hash_list[] = $row[1]; 
}

//апдейтим все pictures по списку hash одним запросом
if(!empty($hash_list)) {
    mysqli_query ($db, "
        UPDATE `pictures` SET `result`='PROCESS' 
        WHERE `hash` IN('".join("','", $hash_list)."') 
    ");
}

echo json_encode($response);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vitaly_74
@vitaly_74
Попробуйте использовать ключевое слово IN и подставть туда массив
например было:
SELECT *
  FROM contacts
 WHERE last_name = 'Bernard'
    OR last_name = 'Boy'
    OR last_name = 'Tomas';

стало
MySQL
SELECT *
  FROM contacts
 WHERE last_name IN ('Bernard', 'Boy', 'Tomas');

По сути при переборе вы делаете тоже самое.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽