0

私はプログラミングの初心者で、何時間も検索しても解決できなかったエラーがあります。

フォームを使用して検索を実行し、データをテーブルに表示します。その部分はかなり簡単でした...しかし、最初に使用した日付ではなく、最終結果に含まれる日数も計算したいと思いますクエリ。

クエリは、2 つの日付の間の日数と指定された会社からの結果を検索します。問題は、最終結果で、検索した日ではなく、結果から何日かを計算することです。

例: 2 月 11 日から 2 月 20 日までの 2 つの日付を検索する場合 会社 = 1

会社 1 の結果が 3 日しかない場合、3 日だけを計算するようにします。

その部分で自分のコードが間違っていることは知っていますが、自分のやりたいことを実行させることができません。

これを説明するための私のコードの一部を次に示します。

if (isset($_POST['search'])) {

$date1 = mysql_prep($_POST['date1']);
$date2 = mysql_prep($_POST['date2']);
$latte = mysql_prep($_POST['latte']);

$query = "SELECT * FROM payroll WHERE (day BETWEEN '{$date1}' AND '{$date2}') AND (company = '{$latte}') ORDER BY day ASC ";

$result = mysql_query($query, $connection);     

$woof = "SELECT SUM(hours) FROM (SELECT * FROM payroll WHERE (day BETWEEN '{$date1}' AND '{$date2}') AND (company = '{$latte}') ORDER BY day ASC) AS subt ";
$raw = mysql_query($woof, $connection);
if(!$raw) { die(mysql_error());}
$meow = mysql_result($raw, 0, 0);

$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24) +1);
if(!$result) {
    echo "FAIL"; 
    } else {
    echo "<table>
<tr>
<th> Date </th>
<th> Hours </th>    
<th> Job Title </th>
<th> Job Description </th>
<th> Paid </th>
<th> For </th>
</tr>"; 
while($row = mysql_fetch_array($result))
{   

$company = $row['company']; 

 if($company == 0) {
$company = "Wilson Electric";
} if($company == 1) {
    $company = "Wilson Rental";
    } if ($company == 2) {
        $company = "Church of Christ";
        }
echo "<tr>";
echo "<td class=\"center\">" . $row['day'] . "</td>";
echo "<td class=\"center\">" . $row['hours'] . "</td>";
echo "<td style=\"padding:5px;\">" . $row['job_title'] . "</td>";
echo "<td style=\"padding:5px;\">" . $row['job_description'] . "</td>";
echo "<td class=\"center\">" . $row['paid'] . "</td>";
echo "<td style=\"padding:5px;\">" . $company . "</td>"; 

echo "</tr>";
}
echo "<tr>";
echo "<td class=\"center\"> Total Days:  " . $days . "</td>";
echo "<td class=\"center\"> Total Hours: " . $meow . "</td>";
echo "</tr>";
}
} 

読んでくれてありがとう、誰かが私に解決策を教えてくれることを願っています。

4

2 に答える 2

0

仕様に一致する個別の値の数が必要な場合dayは、"woof" SQL ステートメントの SELECT リストに単純な式を追加できます。

SELECT SUM(hours), COUNT(DISTINCT `day`) AS cnt_days FROM ... 

$meow = mysql_result($raw, 0, 0);
$days = mysql_result($raw, 0, 1);

day同じ値を持つ (すべての述語を満たす)行が複数ある場合、そのday値は 1 回だけカウントされることに注意してください。重複を含め、 NULL 以外のday値を持つ行の数が必要な場合は、DISTINCT キーワードを省略してください。)


SQL ステートメントはもっと簡単に記述できることに注意してください。(不要な)インラインビュー(つまり、派生テーブル)と不要な ORDER BY を省略できます...

SELECT SUM(p.hours) AS sum_hours
     , COUNT(DISTINCT p.day) AS cnt_days
  FROM payroll p
 WHERE p.day BETWEEN '{$date1}' AND '{$date2}'
   AND p.company = '{$latte}'
于 2013-02-21T00:48:53.727 に答える
-1

DateTime::diffを使用できるかもしれません

于 2013-02-21T00:49:38.797 に答える