如何逐行读取和更新表sql和php?

如何逐行读取和更新表sql和php?,php,sql,Php,Sql,我有一个数据库,我想逐行读取一个表,然后为每一行更新一个单元格。我已经写了下面的代码,但是有更好的方法吗?更好的方式,我的意思是它比我的代码花费更少的时间。 这是我的密码: $List = 'some text...'; $SQL = "SELECT * FROM TABLE"; $res = mysqli_query($database, $SQL); while($row = mysqli_fetch_assoc($res)){ if(strp

我有一个数据库,我想逐行读取一个表,然后为每一行更新一个单元格。我已经写了下面的代码,但是有更好的方法吗?更好的方式,我的意思是它比我的代码花费更少的时间。 这是我的密码:

$List = 'some text...';
$SQL = "SELECT * FROM TABLE";
$res = mysqli_query($database, $SQL);


    while($row = mysqli_fetch_assoc($res)){
        if(strpos($List,$row['name']) !== false){
            mysqli_query($database, "UPDATE TABLE SET `yes`=1 WHERE name='".$row['name']."'");
        }else{
            mysqli_query($database, "UPDATE TA SET `yes`=0 WHERE name='".$row['name']."'");
        }
    }

这种方法并不是最好的,SQL的思想是以一种更有效的方式管理并能够做到这一点。您可以只执行2次查询并更新信息,而不是迭代每一行并执行总计行+1次查询

例如:

-- Update all to 0
UPDATE TABLE SET `yes`=0 ;

-- Update the one on the list to 1
UPDATE TABLE SET `yes`=1 WHERE name in ('value1','value2','value3');
这种方法可以节省大量的执行时间,并在非常大的数据集上更有效地处理事件。

我这里有两种解决方案

解决方案1:

复制表并执行更新和重命名原始表,同时将“复制1”表重命名为“原始1”

表1复制到表2 在表2上执行该操作

然后将表_1重命名为bkp_表_1 然后将表_2重命名为表_1

解决方案2


用户选择在新表中插入数据,您需要更新哪些内容。

您可以在查询中使用LOCATE,例如“更新表集‘是’=if(LOCATE(name,$list)=0,0,1)”。它会更新所有行吗@droopsnoot@zizo123456在你做任何其他事情之前,你需要开始学习准备好的陈述。如果您用来学习的资源告诉您直接将变量中的数据放入SQL查询,则需要对其进行装箱。就个人而言,我更喜欢PDO,但如果你喜欢mysqli,那么也许这是一个好的开始:@jameson2012谢谢你。。。这只是一个测试,我使用事先准备好的语句。问我的问题时,我更喜欢使用
mysqli_query
并直接输入我的数据:)@zizo123456“这只是一个测试”是一种哲学,最终导致人们在生产中意外地留下不安全的代码。即使是测试,也应该将其视为生产代码。至于你在这里的问题更喜欢它,我想你会花很多时间被告知你的代码已经过时并且不安全。谢谢你的回复。只是不知道名字在哪里('place1','place2','place3')实际功能以及我应该放置什么来代替
place1
place2
,等等…您有一个列表$list=“some info”;那份清单的内容是什么?您可以使用一个数组并使用它来构造查询,而不是使用带有值的字符串。例如“place1”、“place2”和son on。如果我只使用字符串而不将其转换为数组,会怎么样?不行?你是怎么打破$list变量上的不同值的?我没有打破。。。我只是在使用strpos,正如你在我的代码中看到的,它们都不是标准的解决方案。。。我们在stackoverflow中讨论的是标准编程。