PHP:虽然循环只运行一次,但应运行多次

时间:2018-02-04 12:14:15

标签: php mysql sql

第一次处理我需要从一个表中提取数据的项目(比如200个记录/结果),并根据该结果集中某个列的结果,我需要查询其中一个我的其他5个表(我需要查询的表在我做出第一个查询之前没有定义)

我目前的印象是我无法使用某种类型的JOIN来执行此操作,因为在第一组结果返回之前我无法知道需要加入哪个表。

所以我提出的解决方案如下(为简单起见,示例代码)

$FirstTableVals = array();
$sql = ("SELECT * FROM TABLE_A");
$run = $con->query($sql);

if($run->num_rows > 0)
{
  while($row = $run->fetch_assoc())
  {
      foreach($row as $key => $value)
        {
            $FirstTableVals[$key] = $value;
        }

      $valueToSwitch = $FirstTableVals["VAL_TO_SWITCH"];
      //$SecondTable can be 1 of 5 different table names
      $SecondTable = $FirstTableVals["SECOND_TABLE_TO_QUERY"];

      switch ($valueToSwitch)
      {
        case"1":
              $sql = ("SELECT * FROM $SecondTable WHERE SOME_COLUMN = SOME_VALUE");
              $run = $con->query($sql);
              if($run->num_rows > 0)
              {
                  while($row = $run->fetch_assoc())
                  {
                     //save some values from the second table 
                  }
              }
                    //echo the results of TABLE_A and second table
             break;

        case"2":
              $sql = ("SELECT * FROM $SecondTable WHERE SOME_OTHER_COLUMN = SOME_OTHER_VALUE");
              $run = $con->query($sql);
              if($run->num_rows > 0)
              {
                  while($row = $run->fetch_assoc())
                  {
                     //save some values from the second table 
                  }
              }
                     //echo the results of TABLE_A and second table
             break;
        default:
              break;
      }
  }
 }

现在,我遇到的问题是,其中一个" Second"在执行" Second"之后的所有内容后执行sql查询循环时,它将跳出while循环并回显我的值,但在不中断switch语句然后再次运行的情况下停止,因为" First" sql查询循环。

从本质上讲,这似乎仅适用于" TABLE_A"而不是再次循环并使用" Second"执行switch语句。 sql查询" TABLE_A"。

中的每条记录

如果其中任何一项没有任何意义,请告诉我,我会尽力详细说明可能令人困惑的事情。

对我来说真的很难过,因为在我看来应该按照我的预期运行。

1 个答案:

答案 0 :(得分:2)

你覆盖了$FirstTableVals = array(); $sql = ("SELECT * FROM TABLE_A"); $run1 = $con->query($sql); if($run1->num_rows > 0) { while($row = $run1->fetch_assoc()) { foreach($row as $key => $value) { $FirstTableVals[$key] = $value; } $valueToSwitch = $FirstTableVals["VAL_TO_SWITCH"]; //$SecondTable can be 1 of 5 different table names $SecondTable = $FirstTableVals["SECOND_TABLE_TO_QUERY"]; switch ($valueToSwitch) { case"1": $sql = ("SELECT * FROM $SecondTable WHERE SOME_COLUMN = SOME_VALUE"); $run2 = $con->query($sql); if($run2->num_rows > 0) { while($row = $run2->fetch_assoc()) { //save some values from the second table } } //echo the results of TABLE_A and second table break; case"2": $sql = ("SELECT * FROM $SecondTable WHERE SOME_OTHER_COLUMN = SOME_OTHER_VALUE"); $run3 = $con->query($sql); if($run3->num_rows > 0) { while($row = $run3->fetch_assoc()) { //save some values from the second table } } //echo the results of TABLE_A and second table break; default: break; } } } 变量,这就是它打破循环的原因。请更改您的代码:

~/.local/bin