SQL выбирает результаты и использует их как для массива в инструкции update

#php #sql

#php #sql

Вопрос:

Я пытаюсь выбрать 4 случайных имени из моей базы данных sql. Мне нужно, чтобы эти 4 имени были обновлены в инструкции update. Я пытаюсь сделать это с помощью инструкции for, но это не работает.

Вопрос: Как мне выбрать случайные результаты, ограниченные 4 в этом случае, и использовать результаты для обновления таблицы базы данных только этими 4 результатами в операторе where. Мне нужно получить имена отдельно от обновления, чтобы выполнить запрос к ним на более позднем этапе.

 $stmt = $mysqli->prepare("SELECT id,naam,geld,slapped,slaptime,lastbananacrime,banana_safe FROM gebruikers WHERE geld > 50000 AND naam NOT IN (?) 
ORDER BY RAND() LIMIT 4");
$stmt->bind_param("s",$usernamesession);
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_array();


for($i=0;$i<count($data['id']);$i  ){
    $target = $data['naam'][$i];

$stmt8 = $mysqli->prepare("UPDATE gebruikers SET geld = geld   trim(?), lastbananacrime = NOW()
WHERE naam = ? ");
$stmt8->bind_param("ss", $bananasstolerounded,$target);
$stmt8->execute();
 

Комментарии:

1. У кого-нибудь еще есть предложения, как это сделать?

Ответ №1:

Прелесть базы данных SQl заключается в том, что многие операции, которые потребовали бы перебора наборов записей в PHP, могут быть делегированы базе данных в виде одного запроса.

Здесь вы выбираете имена случайным образом, а затем повторяете этот набор, чтобы применить обновления по отдельности. При правильном запросе на ОБНОВЛЕНИЕ нет необходимости в отдельных операциях:

 $stmt8 = $mysqli->prepare("UPDATE gebruikers 
    SET geld = geld   trim(?),
    lastbananacrime = NOW() 
    WHERE geld > 50000 AND naam NOT IN (?) 
    ORDER BY RAND() LIMIT 4");

$stmt8->bind_param("ss", $bananasstolerounded,$usernamesession);
$stmt8->execute();
 

Непонятно, для чего вы создаете целевой список naam . Вполне вероятно, что расширение к этому запросу сделает это и за вас.

Комментарии:

1. Спасибо. Таким образом, я могу обновить 4 случайных имени. Я пытаюсь сгенерировать список с помощью запроса select. Мне это нужно отдельно, потому что я использую 4 случайных имени в более позднем стадионе. Итак, обновление не даст мне имена, которые были обновлены?

2. @newusertomysqli12 Это правда, что это не вернет вам имена. Если это важно, этот подход может быть не для вас. Однако вы показали только небольшую часть своего кода, поэтому могут быть другие способы достижения целей, которые не требуют итерации по набору записей.

3. Спасибо за реакцию. На данный момент это единственный код, который я написал для достижения этой цели. Я пытаюсь сгенерировать случайный список из 4 с помощью этого запроса. Когда я закончу, я хочу использовать эти имена в других запросах, например, в обновлении, которое я опубликовал. Итак, я ищу способ сохранить эти 4 имени в переменных, чтобы я мог с ними работать. Извините за неясность. Кто-нибудь знает, как приблизиться?