【问题标题】:While loop not returning correct output when nested嵌套时循环不返回正确的输出
【发布时间】:2015-08-16 03:06:12
【问题描述】:

我有一个 while 循环,它应该首先使用从另一个函数获得的 job_id 从名为 submitresume 的表中获取 individual_id。然后它将在另一个 while 循环中使用该 id 从单个表中获取 first_namelast_name。然后它将使用另一个 while 循环从提交的简历表中获取 submitted_id

我拆分第一个和最后一个 while 循环以从输出中获取不同的值。

我的第一个 while 循环。它首先使用从另一个函数获得的 job_id 从名为 submitresume 的表中获取individual_id。它为我提供了两个用户 ID 的正确输出:9 和 4。

 global $database;
    $query = "SELECT DISTINCT individual_id FROM submittedresume WHERE job_post_id='$id'";
    $output = $database->query($query);
    while ($row = mysqli_fetch_array($output)) {
        $indvId = $row[0];
    }

这是第二个内部 while 循环。它给了我玛丽珍(不重复)和汤姆索亚的输出。

 $indvId = $row[0];
        $sql = "SELECT * FROM individual WHERE individual_id='$indvId'";
        $result = $database->query($sql);                
        while ($details = mysqli_fetch_array($result)) {  
            $first = $details['first_name'];
            $last = $details['last_name'];
            echo $first;
            echo $last;
        }

这是我的全部功能:

public function displayApplications($id){
    global $database;
    $query = "SELECT DISTINCT individual_id FROM submittedresume WHERE job_post_id='$id'";
    $output = $database->query($query);
    while ($row = mysqli_fetch_array($output)) {
        $indvId = $row[0];
        $sql = "SELECT * FROM individual WHERE individual_id='$indvId'";
        $result = $database->query($sql);                
        while ($details = mysqli_fetch_array($result)) {  
            $first = $details['first_name'];
            $last = $details['last_name'];
            $sqlquery = "SELECT DISTINCT resume_title FROM submittedresume WHERE individual_id='$indvId' order by submitted_id";
            $data = $database->query($sqlquery); 
            if (mysqli_num_rows($data) == 0) {
                    echo "Database is empty <br>";
                } else {
                     while (($name = mysqli_fetch_array($data))) {
                           echo $first . " " . $last . " "."<a href=handleDownload.php?id=$id>$name[0]</a><br>";
                       }
                    }
        }
    }
}

这就是我现在得到的:

first_name | last_name | resume_name
Mary       | Jane      | resume_1
Mary       | Jane      | resume_2

这就是我要找的:

first_name | last_name | resume_name
Mary       | Jane      | resume_2
Tom        | Sawyer    | resume_1

【问题讨论】:

  • 您需要重写查询并改用JOIN

标签: php mysqli while-loop


【解决方案1】:

我认为在while 之后使用foreach 循环:

例如:

 $query = "SELECT DISTINCT individual_id FROM submittedresume WHERE job_post_id='$id'";
$output = $database->query($query);
$details = mysqli_fetch_array($result);

 foreach($details as $key => $value){
       echo 'Key: '. $key . ' '. 'Value: '. $value;
 }

【讨论】:

  • 我在使用 foreach 时得到双倍输出。有没有办法让我删除双打?键:0 值:4 键:individual_id 值:4 键:0 值:9 键:individual_id 值:9
  • 我已经更新了我的答案。我想在 foreach 循环中使用 while 是我的错误,因为 while 循环查询的每个数据
【解决方案2】:

$indvId = $row[0]; 正在返回结果数组中的第一项

我个人会使用 foreach 循环,但您可以按照自己的方式添加一个计数器,即:循环前$count = 0;,循环内$count++;$indvId = $row[$i];

【讨论】:

  • foreach 方法听起来很有趣。如果我要使用 foreach,我会怎么做?
  • 你能发布 print_r($output) 让我看看数组是什么样子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多