@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');

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

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект