2017-05-12 50 views
0

我使用此代碼迴路決定:PHP循環 - 使通過的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」]的變化我要插入一些頭數據。 下面是一些結果:

Here are the first part of the results

有兩件事情我不明白 - 爲什麼是日期檢查在第二行「一個日期」,即爲什麼14/05/2017相比,13/05/2017?
此外,爲什麼第二個回聲陳述不出現?
我想我錯過了while循環的工作方式的一些基本點!這裏的任何幫助非常感謝。謝謝。

下面是使用上述類似數據在日期更改時插入標頭的說明。 (該網頁從Salesforce通過其API提取數據,然後使用類似的日期檢查到一個在上面的MySQL的代碼 - 但它遍歷了For..Each循環中的數據) enter image description here

+1

if條件中的'$ date1'變量是什麼?它的價值在哪裏? –

+0

你必須在你的循環之外聲明'$ date1' – schlonzo

+0

對不起,$ date1的聲明在代碼中的前面,在我省略的數據庫憑證之前。 $ date1 =「01/01/1900」; – peter300

回答

0

您需要僅在日期發生變化時才輸出標題。由於數據行需要始終顯示(對於每行),因此根本不需要在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"; 
} 
+0

謝謝mon_dragu正是我想要的。我不得不刪除回聲「<,/table>」之上的};出於某種原因,我只是在思考。也感謝你解釋我出錯的地方。我會在答案下面發佈完整的代碼,以便幫助某人。再次感謝 – peter300

+0

很高興我能幫到你。在'echo'之前需要一個'}'來關閉while循環。 –

1

下面是完整的代碼整合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記錄集的循環。