首页 > 解决方案 > SQL 选择结果并将它们用作更新语句中的数组

问题描述

我正在尝试从我的 sql 数据库中选择 4 个随机名称。我需要在更新语句中更新这 4 个名称。我正在尝试使用 for 语句来执行此操作,但这不起作用。

问题:在这种情况下,我如何选择限制为 4 个的随机结果并使用结果更新数据库表,其中只有 where 语句中的这 4 个结果。我需要将名称与更新分开,以便在以后的体育场中对它们运行查询。

$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();

标签: phpsql

解决方案


SQl 数据库的美妙之处在于,许多需要在 PHP 中遍历记录集的操作可以作为单个查询委托给数据库。

在这里,您随机选择名称,然后迭代该集合以单独应用更新。有了正确的 UPDATE 查询,就不需要单独的操作:

$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. 对此查询的扩展很可能也会为您做到这一点。


推荐阅读