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

时间:2016-02-15 18:47:06

标签: php mysql arrays

有人请帮帮我..

我有一个像这样的表的数据库..

myDB

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

我尝试使用以下代码,但“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]' ");

变量$ z和$ y只是在需要添加新ID时递增的数字。 先感谢您!任何帮助将不胜感激!

每次创建新ID时,我都想将其添加到“update_Patient”和“update_Medinfo”下的ID列表中。例如,

  pcName   |       update_Patient     |    upadte_Medinfo 
   PC1     | web-id1,web-id2,web-id3  | web-id1,web-id2,web-id3
   PC2     | web-id1,web-id2,web-id3  | web-id1,web-id2,web-id3

如果添加了新的ID,例如web-id4,将在所有pcNames中更新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

2 个答案:

答案 0 :(得分:0)

你可以使用一些基本的查询,这种事情可能会有所帮助:

$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."'"
    );

MySQL CONCAT_WS()

如果没有,试试这个,应该更好,更容易理解

<?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']."'"
        );
}

答案 1 :(得分:0)

你的业务逻辑对我来说似乎有点模糊,因为你似乎总是在更新所有行。我的回答是假设这是有意的。

您的代码除了查询本身之外还有很多问题(错误的连接语法,用$allpp覆盖所有$roww和类似值,无用关于检测&#34; no&#34;的逻辑,当你只是在几行之后覆盖这些值时,等等。)

但我的猜测是,鉴于您在每次执行时更新所有行,并且要添加的$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);

请注意,我已经取消了前期选择,因为它似乎完全没有必要,因为你对现有的值一无所知。