【问题标题】:How to use mysql_fetch_assoc to process records in php?php中如何使用mysql_fetch_assoc处理记录?
【发布时间】:2015-10-03 00:38:42
【问题描述】:

我正在尝试检索主题名称,有两种类型的主题可选和主要。每个学生都包含可选科目和主要科目。通过使用这些主题 ID,我可以从主题表中检索名称。 但是在这个结果中只出现了一个可选的主题名称,我的代码有什么问题吗?请帮助我

  $subject_names = array();
for($i=0;$i<count($student_num_data);$i++)
{
    $optional_id_list = mysql_query("SELECT optional_subject_id FROM ms_student WHERE student_id = ".$student_num_data[$i]['student_id']);
    while($row = mysql_fetch_assoc($optional_id_list))
    {
        foreach ($row as $key) 
        {
            $optional_subject = mysql_query("SELECT subject_name FROM ms_subject WHERE subject_id = ".$key['optional_subject_id']); 
            $optional_subject_name = array();
            while($row1 = mysql_fetch_assoc($optional_subject))
            {
                $optional_subject_name[] = $row1;  
            }
        }
    }
    $subject_id_list = mysql_query("SELECT subject_ids FROM subject_config WHERE stream_index =".$stu_stream);  
    while($row = mysql_fetch_assoc($subject_id_list))
    {
        foreach ($row as $key) 
        {
            $main_subject = mysql_query("SELECT subject_name FROM ms_subject WHERE subject_id = ".$key['subject_ids']); 
            $main_subject_name = array();
            while($row3 = mysql_fetch_assoc($main_subject))
            {
                $main_subject_name[] = $row3;  
            }
        }
    } 
    $subject_names = $main_subject_name[0]['subject_name'].','.$optional_subject_name[0]['subject_name'];

    $small_subject_name=trim($subject_names);//remove whitespace at end of string         
    $small_subject_name = str_replace(" ", "-", $small_subject_name); // Replaces all spaces with hyphens.     
    $small_subject_name = preg_replace('/[^A-Za-z0-9\-]/', '', $small_subject_name); // Removes special chars.     
    $small_subject_name =  preg_replace('/-+/', '-', $small_subject_name); // Removes multiple hyphens.            
    $small_subject_name = str_replace("-", " ", $small_subject_name); // Replaces all hyphens with spaces.            
    $small_subject_name=strtolower(str_replace(" ","_",$small_subject_name));  

    if($stu_class == 11 || $stu_class == 12)
    {  
        $subject_statement = $subject_statement."IF(".$small_subject_name."='ab','ab',round(".$small_subject_name.",2)) AS ".$small_subject_name.",";   
        $sum_subject_statement = $sum_subject_statement.'IFNULL(`'.$small_subject_name.'`,0) + ';           
        /* start by 1022 02-09-2014 */
        $subject_pass_statement .= $small_subject_name." >= 33 AND ";       
        $subject_pass_statement = substr($subject_pass_statement,0,strlen($subject_pass_statement)-5);
        $update_pass_statement = "UPDATE ".$table_name." SET class_rank = 'P' WHERE 1=1 ".$track_div_stmnt.$id_stmnt." AND student_id = ".$student_num_data[$i]['student_id']." AND ".$subject_pass_statement;
        $update_pass_query=mysql_query($update_pass_statement);
    }
}

【问题讨论】:

  • 很难遵循代码,尤其是 php 代码 - 请从表格中显示结构(和一些数据)。
  • 在您向我们展示的表格中,没有“subject_name”列...
  • subject_name 在另一张桌子上。 ecach id 有对应的名字
  • 安装 xdebug 并单步执行代码,然后将有问题的代码粘贴到此处。
  • 您需要缩小问题范围,在寻求帮助时,您需要明确您的目的是什么:1. 意图,2. 尝试实现它,3. 您遇到的问题。

标签: php mysql database logic


【解决方案1】:

这不是关于mysql_fetch_assoc 函数,而是关于你的代码的逻辑。你很难过,主要是因为你的代码看起来如何。你一次面临太多问题,这里最合理的解决方案是:

分解问题

  1. 想想这段代码将执行哪些主要任务/操作。
    比方说:
    1. 对于每个学生,我们都会检索他们注册的可选科目。
    2. 然后我们检索他们正在学习的主要科目。
    3. 然后我们检索他们的结果以确定他们通过了哪些科目,没有通过哪些科目。
  2. 从表达您的意图的代码开始,使用尚不存在的函数:

     $passStatementForYear = new PassStatement($year);
     $students = getStudentsForSchoolYear($year);
     foreach ($students as $student) {
         $optionalSubjects = loadOptionalSubjectsForStudent($student);
         $mainSubjects = loadMainSubjectsForStudent($student);
         $passReport = prepareReportForStudent(
             $student, $optionalSubjects, $mainSubjects
         );
         updatePassStatementUsingStudentsReport(
             $passStatementForYear, $passReport
         );
     }
    
  3. 构建缺失的部分(函数、类等)

现在您只需要处理这些独立的步骤。每个功能都会引入新的小问题,您可以以孤立和简单的方式处理这些问题。只有这样,如果您发现自己在使用 mysql_fetch_assoc 时遇到问题,请参阅官方文档和他们显示的示例:

$sql = "SELECT id as userid, fullname, userstatus
        FROM   sometable
        WHERE  userstatus = 1";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
    echo $row["userstatus"];
}

mysql_free_result($result);

【讨论】:

  • 当我回显更新查询时,它返回 UPDATE track_evaluation_11 SET class_rank = 'P' WHERE 1=1 AND evaluation_division = 'A' AND evaluation_config_id = '32' AND student_id = 1070 AND malayalam >= 33UPDATE track_evaluation_11 SET class_rank = 'P' WHERE 1=1 AND evaluation_division = 'A' AND evaluation_config_id = '32' AND student_id = 1071 AND malayalam >= 33malayalam >= 33
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多