Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php通过MySQL记录循环-基于行值做出决策_Php_Mysql - Fatal编程技术网

php通过MySQL记录循环-基于行值做出决策

php通过MySQL记录循环-基于行值做出决策,php,mysql,Php,Mysql,我使用以下代码循环MySQL行: $sql = "SELECT * FROM vwPublicServices2 ORDER BY Service_Date__c, Service_Time__c"; $result = $conn->query($sql); if ($result->num_rows > 0) { echo "<table><tr><th>Service Date</th><th>Ser

我使用以下代码循环MySQL行:

$sql = "SELECT * FROM vwPublicServices2 ORDER BY Service_Date__c, 
Service_Time__c";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table><tr><th>Service Date</th><th>Service Time</th>
    <th>Church</th><th>Service</th><th>Service Leader</th></tr>";

    while($row = $result->fetch_assoc()) {    

       // insert header stuff on change of $date1
       if ($row["ServiceDate"] <> $date1) { 

          echo $row["ServiceDate"]. "(".$date1.")"."<br/>";

          echo "<tr><td>" . $row["ServiceDate"]. "</td><td>" . 
          $row["Service_Time__c"]. "</td><td>" . $row["Location__c"]. "</td>
          <td>" . $row["PublicName"]. "</td><td>" . $row["FullName"]."</td>
          </tr>";

          // set $date1 = row ServiceDate
          $date1 = $row["ServiceDate"];  

        } else {

          //  echo row data to follow on previous - i.e date has not 
          changed
          echo "<tr><td>" . 
          $row["ServiceDate"]. "</td><td>" . 
          $row["Service_Time__c"]. "</td><td>" .
          $row["Location__c"]. "</td><td>" .
          $row["PublicName"]. "</td><td>" . 
          $row["FullName"]."</td></tr>";

        }

     }
     echo "</table>";
  } else {
     echo "0 results";
}

$conn->close();
每次行[ServiceDate]更改时,我都要插入一些标题数据。 以下是一些结果:

有两件事我无法理解——为什么日期勾选为“一次约会”,即在第二行,为什么2017年5月14日与2017年5月13日相比? 还有,为什么第二个echo语句没有出现? 我想我在while循环的工作方式上遗漏了一些基本点!非常感谢您的帮助。谢谢

下面是使用与上面类似的数据在日期更改时插入标题的图示。此网页通过Salesforce的API从Salesforce获取数据,并使用与上面MySQL代码中类似的日期检查,但它使用For..Each循环遍历数据

只有当日期更改时,才需要输出标题。由于数据行需要始终为每一行显示,因此它根本不需要处于if状态

您的代码应该如下所示:

if ($result->num_rows > 0) {
    echo "<table>";

    while($row = $result->fetch_assoc()) {    

       // insert header stuff on change of $date1
       if ($row["ServiceDate"] <> $date1) { 

           echo "<tr><th>".$row["ServiceDate"]. "(".$date1.")"."</th></tr>";
           echo "<tr><th>Service Date</th><th>Service Time</th>
    <th>Church</th><th>Service</th><th>Service Leader</th></tr>";

            $date1 = $row["ServiceDate"]; 

        } 

          //  echo row data 
          echo "<tr><td>" . 
          $row["ServiceDate"]. "</td><td>" . 
          $row["Service_Time__c"]. "</td><td>" .
          $row["Location__c"]. "</td><td>" .
          $row["PublicName"]. "</td><td>" . 
          $row["FullName"]."</td></tr>";

     }
     echo "</table>";
  } else {
     echo "0 results";
}

以下是包含moni_dragu代码的完整代码:

<style>
table, th, td {
border: 1px solid black;
}
</style>


<?php
$servername = "****";
$username = "****";
$password = "****";
$dbname = "*****";



$date1="01/01/1900";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT * FROM vwPublicServices2 ORDER BY Service_Date__c, 
Service_Time__c";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table>";

    while($row = $result->fetch_assoc()) {    

       // insert header stuff on change of $date1
       if ($row["ServiceDate"] <> $date1) { 

          echo "<tr><th>".$row["ServiceDate"]. "(".$date1.")"."</th></tr>";
          echo "<tr><th>Service Date</th><th>Service Time</th>
          <th>Church</th><th>Service</th><th>Service Leader</th></tr>";

          $date1 = $row["ServiceDate"]; 

        } 

        //  echo row data 
        echo "<tr><td>" . 
        $row["ServiceDate"]. "</td><td>" . 
        $row["Service_Time__c"]. "</td><td>" .
        $row["Location__c"]. "</td><td>" .
        $row["PublicName"]. "</td><td>" . 
        $row["FullName"]."</td></tr>";

    }

 echo "</table>";
 } else {
   echo "0 results";
}

$conn->close();

再次感谢您解决了这个问题,也感谢您加深了我对MySQL记录集while循环的理解

if条件下的$date1变量是什么?它的值在哪里?您必须在循环之外声明$date1对不起,$date1的声明在代码的前面,在我省略的数据库凭据之前$日期1=1900年1月1日;根据您编写的代码,您的输出是正确的。您的日期检查仅在日期更改时可见。我想确定我完全明白你想做什么。您说您想插入一些标题数据,但在这两种情况下都向表中添加了相同的行。您能添加一些样本数据和所需的输出吗?谢谢moni_dragu。基于上述数据,我需要盒装标题服务日期、教堂时间等,然后是数据行2017年5月13日。代码应存储于2017年5月13日。当它读取下一行时,它会看到2017年7月14日,因此它会输出2017年7月14日的日期和盒装标题,然后输出第一行09:00 Bickington。它存储于2017年5月14日,然后读取下一条记录,跳过盒装标题。谢谢mon_dragu,我想做的就是这样。我必须移除回声上方的};出于某种原因,我只是在思考。也谢谢你解释我哪里出错了。我会在你的答案下面贴上完整的代码,以防对别人有所帮助。谢谢你,小伙子,我能帮上忙。在echo之前需要一个}来关闭while循环。