在php中从数据库检索值到数组

在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

有人请帮帮我

我有一个数据库,里面有这样的表

pcNAME下的列可以有多个值。现在我想将“update_Patient”和“update_Medinfo”的值检索到一个数组中,稍后将使用新值更新该数组。。哦,顺便说一下,“update_Patient”和“update_Medinfo”下的值并不总是“no”,它可以保存“ID1,ID2,ID3”,所以我想只更新这个,如果是这样的话,它会将新的ID和其他ID一起添加

我尝试使用以下代码,但“update_Patient”和“update_Medinfo”下的值没有更新。请帮帮我

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