MYSQL - tarih maç Sorgu ürün

2 Cevap php

PHP bir takvim yapıyorum, ve ben bir 31 gün (ya da ayda kaç gün bağlı olarak) için döngü için, her gün $ listDay ile yazılmış olması.

Benim MySQL veritabanı, bir unix zaman damgası ile 'EventDate' adında bir alan var ve ben sadece gün damgası inşa değişken $ event_day var. Ben "$ listDay == $ event_day sonra bu göstermek durumunda" diyor bir sorgu yazmak nasıl anlamaya olamaz. Ben seçenekleri bir sürü ile oynamak oldum çünkü bu kod biraz dağınık olabilir.

Bu ne yapmak gerekiyordu bir olay o gün varsa, moused eğer (ki js ele olayın küçük bir popup gösterecektir ki, bir link ile standart numarasını değiştirin ve ben açılan düzgün çalışan var olduğunu )

Ben bir şey ben MySQL ifadeleri şekilde yanlış olduğunu biliyorum, ama ben oldukça anlamaya olamaz. Ben zaman damgası ile bir ay sorgu 'maç' yapmak için nasıl çözemedim beri Oh evet, ben, 'eventMonth' denilen db bir alan yarattı.

$month = date("F");
$vmonth = date("n");
$current_month = date("n"); //value will change if the user changes the month they are viewing
$current_year = date('Y');
$theday = date(w, mktime(0, 0, 0, $current_month, 1, $current_year));
$daysinmonth = date("t", mktime(0, 0, 0, $current_month, 1, $current_year));

echo "<table bgcolor=\"#C68282\" style=\"border: #990000 1px solid; font-size:8pt; font-family: Tahoma; color: #000000\" cellpadding=\"1\" cellspacing=\"0\" width=\"129\">";
echo "<tr>
<td colspan=7 align=center style=\"font-weight: bold;\">".date('F Y', mktime(0, 0, 0, $current_month, 1, $current_year))."</td>
</tr>";
echo "<tr style=\"background-color: 990000; color: white;\">";
echo "<td align=center>S</td>";
echo "<td align=center>M</td>";
echo "<td align=center>T</td>";
echo "<td align=center>W</td>";
echo "<td align=center>T</td>";
echo "<td align=center>F</td>";
echo "<td align=center>S</td>";
echo "</tr>";
echo "<tr>";
for ($i=0;$i<$theday;$i++)
{
   echo "<td>&nbsp;</td>";
}
$query = "SELECT * FROM calendar WHERE eventMonth = '77'"; 
$result = mysql_query($query); 
$row = mysql_fetch_array($result);
for ($list_day=1;$list_day<=$daysinmonth;$list_day++)
{
    $event_day = date('j',$row['eventDate']);
  echo "<td align=\"center\">";
  if($list_day == $event_day) { 
    echo "<a href=\"#\" class=\"cal\">";
    	echo $list_day . "<span class\"cal\"><div style=\"border-bottom: 1px solid #999999; padding: 2px; \">" . $month ."&nbsp;". $list_day .",&nbsp;". $current_year ." </div><div style=\"padding: 2px;\">" . $row['event'] ."</div></span></a></td>";
    } else { 
    	echo $list_day;
    }
  if ($theday == 6)
  {
    echo "</tr>";
    echo "<tr>";
    $theday = -1;
  }
  $theday++;
}
echo "</tr>";
echo "</table>";

2 Cevap

MySQL adlı kullanın DATE_FORMAT:

SELECT * FROM calendar WHERE DATE_FORMAT(timestamp, '%Y-%m-%d') = '2009-12-11';

Eğer her gün veritabanı sorgulama Ama eğer, o zaman 30 gereksiz sorguları yapıyoruz. Bu bir sorguda önceden tüm olayları almak akıllıca olabilir ve daha sonra bu gibi bu bir dizi, bina olacaktır:

// Get all events for December 2009
$q = mysql_query("SELECT
                    DATE_FORMAT(timestamp, '%d') AS day,
                    event_title
                FROM
                    calendar
                WHERE
                    DATE_FORMAT(timestamp, '%Y-%m') = '2009-12'");

$events = array();
// Loop through the results and put events in array
while($row = mysql_fetch_array($q)) {
    $events[$row['day']][] = $row['event_title'];
}

Şimdi $events gün endeksli ay boyunca her olay vardır ve takvim baskı olarak, kullanarak o gün için olayların miktarda alabilirsiniz:

for($d = 1; $d <= 31; $d++) {
    if(isset($events[$d])) {
        echo count($events[$d])." events!";
    } else {
        echo "No events.";
    }
}

Sadece bir dizeyi kullanın - mysql bunu dönüştürmek

select * from test_time_table where the_time = '2009-12-09';

gün olayları yapmak almak

select * from test_time_table where the_time between '2009-12-09 00:00:00' and '2009-12-09 23:59:59';

Cidden - Date_Format kullanmayın. Sadece mysql gereksiz bir adımı gerçekleştirmek yapacak, bu sorgu önbelleği girmesini sorgu önleyecektir.

Edit - Damgasıyla olarak alan depolama, doğru olan?