我有以下條目的數據庫:PHP MySQL和嵌套循環
Id | UserID | Date | Time
1 | 1 | 06/29/15 | d
2 | 1 | 06/30/15 | n
,我已經產生,然後根據數據庫條目的日曆下面的PHP代碼,它標誌着以特定顏色指定的天數:
<?php
$cMonth = $_REQUEST["month"];
$cYear = $_REQUEST["year"];
$timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate ($timestamp);
$startday = $thismonth['wday'];
$toddate = date("j");
$todmon = date("n");
for ($i=0; $i<($maxday+$startday); $i++)
{
if (($i % 7) == 0)
echo "<tr>";
$getr = mysql_query("SELECT * FROM `reservations` WHERE `UserID` = 1");
$datee = $i - $startday + 1;
$nums = mysql_num_rows($getr);
while ($row = mysql_fetch_assoc($getr))
{
$timestamp = strtotime($row['Date']);
$bookeddate = date("d", $timestamp);
$dates[$nums] = $bookeddate;
$bookedmon = date("n", $timestamp);
if ($cMonth == $bookedmon && $row['Time'] == 'd' && $bookeddate == $datee)
echo "<td title='day booked' align='center' bgcolor='orange' valign='middle' height='20px'>". ($datee) . "</td>";
else if ($cMonth == $bookedmon && $row['Time'] == 'n' && $bookeddate == $datee)
echo "<td title='Night booked' align='center' bgcolor='black' color='white' valign='middle' height='20px'>". ($datee) . "</td>";
else if ($cMonth == $bookedmon && $row['Time'] == 'c' && $bookeddate == $datee)
echo "<td title='Completely booked' align='center' bgcolor='red' valign='middle' height='20px'>". ($datee) . "</td>";
}
if($i < $startday)
echo "<td></td>";
else if ($datee == $toddate && $cMonth == $todmon)
echo "<td title='today' align='center' bgcolor='lime' valign='middle' height='20px'>". ($datee) . "</td>";
else if ($datee != $bookeddate)
echo "<td align='center' valign='middle' height='20px'>". ($datee) . "</td>";
if(($i % 7) == 6)
echo "</tr>";
}
的問題是,它示出了在數據庫中的第一日兩次,而另一個日期顯示只有1次。我如何設法只顯示一次這兩個日期。
您可能需要在您的最後運行php代碼。
第一關:** [停止使用'mysql_ *'功能(http://stackoverflow.com/q/12859942/2302862)** – Siguza
客戶端只需要MySQL,必須堅持它。 – Saifi
你意識到你正在執行相同的查詢並且一遍又一遍地重複使用同一個數據集?這是非常低效的。你必須翻開你的循環 - 運行sql查詢一次,遍歷一次數據集並打印具有特定顏色的日期。 – dmitreyg