在php中从数据库检索值到数组
有人请帮帮我 我有一个数据库,里面有这样的表 pcNAME下的列可以有多个值。现在我想将“update_Patient”和“update_Medinfo”的值检索到一个数组中,稍后将使用新值更新该数组。。哦,顺便说一下,“update_Patient”和“update_Medinfo”下的值并不总是“no”,它可以保存“ID1,ID2,ID3”,所以我想只更新这个,如果是这样的话,它会将新的ID和其他ID一起添加 我尝试使用以下代码,但“update_Patient”和“update_Medinfo”下的值没有更新。请帮帮我在php中从数据库检索值到数组,php,mysql,arrays,Php,Mysql,Arrays,有人请帮帮我 我有一个数据库,里面有这样的表 pcNAME下的列可以有多个值。现在我想将“update_Patient”和“update_Medinfo”的值检索到一个数组中,稍后将使用新值更新该数组。。哦,顺便说一下,“update_Patient”和“update_Medinfo”下的值并不总是“no”,它可以保存“ID1,ID2,ID3”,所以我想只更新这个,如果是这样的话,它会将新的ID和其他ID一起添加 我尝试使用以下代码,但“update_Patient”和“update_Medi
$get = mysqli_query($conn,"SELECT *, COUNT(id) as count FROM `pcnames`");
while($roww = mysqli_fetch_array($get))
{
$allpp[$roww["update_Patient"]] = $roww ;
$allminfo[$roww["update_Medinfo"]] = $roww ;
$pcID[$roww["id"]] = $roww;
$count = $roww["count"];
}
for($idx = 0; $idx <= $count; $idx++)
{
if ($allpp[$idx] == "no")
{
$allpp[$idx] = "";
}
if ($allminfo[$idx] == "no")
{
$allminfo[$idx] = "";
}
$allpp[$idx] = $allpp[$idx]",web-id"$z;
$allminfo[$idx]= $allminfo[$idx]",web-id"$y;
$update = mysqli_query($conn,"UPDATE `pcnames` SET `update_Patient` = '$allpp[$idx]' , `update_Medinfo` = '$allminfo[$idx]' WHERE `id` = '$pcID[$idx]' ");
如果添加了新Id,例如web-id4,则将更新所有PCNAME中的Id列表
pcName| update_Patient | upadte_Medinfo
PC1 | web-id1,web-id2,web-id3,web-id4 | web-id1,web-id2,web-id3,web-id4
PC2 | web-id1,web-id2,web-id3,web-id4 | web-id1,web-id2,web-id3,web-id4
您可以使用一些基本查询,这类查询可能会有所帮助:
$update_Patient = mysqli_query($conn,
"UPDATE `pcnames` SET `update_Patient` = ''
WHERE `update_Patient` == 'no'"
);
$update_Medinfo = mysqli_query($conn,
"UPDATE `pcnames` SET `update_Medinfo` = ''
WHERE `update_Medinfo` == 'no'"
);
$update = mysqli_query($conn,
"UPDATE `pcnames` SET
`update_Patient` = CONCAT_WS(',', `update_Patient`, 'web-patientID".$z."',
`update_Medinfo` = CONCAT_WS(',', `update_Medinfo`, 'web-medID".$y."'"
);
如果没有,试试这个,它会更好,更容易理解
<?php
$get = mysqli_query($conn,"SELECT * FROM `pcnames`");
while($roww = mysqli_fetch_array($get))
{
$all[] = array (
'pp' => $roww['update_Patient'],
'minfo' => $roww['update_Medinfo'],
'id' => $roww['id'],
);
}
for($ii = 0; isset($all[$ii]); $ii++) {
if ($all[$ii]['pp'] == "no")
$all[$ii]['pp'] = "";
$all[$ii]['pp'] = $all[$ii]['pp'].",web-patientID".$z;
if ($all[$ii]['minfo'] == "no")
$all[$ii]['minfo'] = "";
$all[$ii]['minfo'] = $all[$ii]['minfo'].",web-medID".$y;
$update = mysqli_query($conn,
"UPDATE `pcnames` SET
`update_Patient` = '".$all[$ii]['pp']."',
`update_Medinfo` = '".$all[$ii]['minfo']."'
WHERE `id` = '".$all[$ii]['id']."'"
);
}
您的业务逻辑在我看来有点模糊,因为您似乎总是在更新所有行。我的回答假设这是有意的
您的代码除了查询本身之外还有很多问题(错误的连接语法,用$roww
值覆盖所有的$allpp
和类似的值,检测“否”的无用逻辑,当您在几行之后覆盖这些值时,等等)
但是我想,如果每次执行都要更新所有行,并且要添加的$y
和$z
的值对于所有行都是相同的,那么我认为您可以将整个代码部分简化为如下几行:
// build new strings to be added
$new_patient_value = 'web-id' . $z;
$new_medinfo_value = 'web-id' . $y;
// form query to update entire table
// we use CONCAT_WS here to add comma seperator
$query = "
UPDATE `pcnames` SET
`update_Patient` = TRIM(LEADING 'no,' FROM CONCAT_WS(',', `update_Patient`, '$new_patient_value')),
`update_Medinfo` = TRIM(LEADING 'no,' FROM CONCAT_WS(',', `update_Medinfo`, '$new_medinfo_value'))";
// execute query
$result = mysqli_query($conn, $query);
注意,我已经取消了预先选择,因为它似乎完全没有必要,因为您对现有值没有做任何操作。@Blag,您不了解哪一部分?请参考以下链接,并将其应用于您的代码。在这样的循环中查询有点反模式。您能否在问题中详细说明更新update\u Patient
和update\u medInfo
字段的基本业务逻辑。我的猜测是,您可能能够将其放入一个查询中,您可以根据该查询立即更新整个表,但如果不理解其逻辑,很难说。您在这里想做什么?$allpp[$idx]=$allpp[$idx]”,web patientID“$z
?这应该是串联吗?$v
这个变量里面是什么?这是我们不知道的一个更新查询谢谢你帮助我,艾哈迈德,v美元的申报价值在哪里?@KathDee我已经更新了第二部分;但是看一看第一部分,我认为这更好(仅使用SQL查询)@KathDee如果对您合适,那么将您的问题标记为“已解决”(选择解决问题的答案并在分数旁边打上“复选标记”),您删除了数据库中删除no
值的部分。如果你运行这个查询,你会得到一些no,web-id5
之类的东西。@Blag我就是这么做的。在TRIM
中做一个小改动,去掉连接中可能存在的任何前导no,
值。我想说,在该字段中以no
作为开头是没有意义的,OP最好在这里保留null值或空字符串。
// build new strings to be added
$new_patient_value = 'web-id' . $z;
$new_medinfo_value = 'web-id' . $y;
// form query to update entire table
// we use CONCAT_WS here to add comma seperator
$query = "
UPDATE `pcnames` SET
`update_Patient` = TRIM(LEADING 'no,' FROM CONCAT_WS(',', `update_Patient`, '$new_patient_value')),
`update_Medinfo` = TRIM(LEADING 'no,' FROM CONCAT_WS(',', `update_Medinfo`, '$new_medinfo_value'))";
// execute query
$result = mysqli_query($conn, $query);