php通过MySQL记录循环-基于行值做出决策
我使用以下代码循环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
$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循环。