1

私はプログラミングに不慣れなので、私の問題に対する簡単な解決策があるかもしれません。

私が達成しようとしているのは、MySQL列で重複フィールドエントリを見つけることです。エントリは日付の例になります01/20/13

日付フィールドを検索して、日付に重複するエントリがいくつあるかを判断する必要があります。次に、その数を見つけたら、日付を取得するループを作成して、日付を日付の名前に変更し、日付を追加します。.と後の番号.

たとえば01/20/13、日曜日なので、以下のデータベースの例では4つの重複エントリがあるため、出力は次のようになります。Sunday.1, Sunday.2, Sunday.3, Sunday.4

01/20/13 - 01/26/13この機能は以下のPHPプログラムで機能していますが、日曜日から土曜日までの7日間の範囲の例で重複を検索するために必要です。1週間分の日付値をハードコーディングしたくありません。ここに問題があり、ここからどこに行けばいいのかわかりません。希望する結果を得るために、数週間分の値をハードコーディングすることしか考えられませんが、もっと簡単な方法があることはわかっています。

私のPHPコード:

<?php

    require '../TimeCard/DB.php';

    $i = 1;

    try{
    $stmt = $conn->prepare('SELECT `date` FROM `timeRecords` WHERE `employeeID`= 1 ORDER BY date ');
    $stmt->execute();
    } catch(PDOException $e){
        echo'ERROR: ' . $e->getMessage();
    }

    while($row = $stmt->fetch())
  {
    if ($row['date'] == "01/20/13"){

        $date = date("l", strtotime($row['date']));
        $$date = "Hello today is " . $date . "." . $i . "<br>";
        echo $Sunday;
        $i++;
    }
  }

?>

データベース:

+----+------------+----------+--------+-------------------+-----------+------------+-----------+---------+
| id | employeeID | date     | timeIn | jobDescription    | equipType | unitNumber | unitHours | timeOut |
+----+------------+----------+--------+-------------------+-----------+------------+-----------+---------+
| 10 |          1 | 01/20/13 | 20:30  | Blah1             |           | 01E        |      NULL | NULL    |
|  2 |          1 | 01/20/13 | 1:00   | Test              |           | 02S        |      NULL | NULL    |
|  9 |          1 | 01/20/13 | 13:00  | Blah12            |           | 02E        |      NULL | NULL    |
|  8 |          1 | 01/20/13 | 6:00   | Blah              |           | 02D        |      NULL | NULL    |
|  1 |          1 | 01/21/13 | 09:12  | Worked in hubbard | Excavator | 01E        |      8375 | 09:14   |
|  3 |          1 | 01/22/13 |        |                   |           | NULL       |      NULL | NULL    |
|  4 |          1 | 01/23/13 |        |                   |           | NULL       |      NULL | NULL    |
|  5 |          1 | 01/24/13 |        |                   |           | NULL       |      NULL | NULL    |
|  6 |          1 | 01/25/13 |        |                   |           | NULL       |      NULL | NULL    |
|  7 |          1 | 01/26/13 |        |                   |           | NULL       |      NULL | NULL    |
+----+------------+----------+--------+-------------------+-----------+------------+-----------+---------+
4

2 に答える 2

0

あなたのアプローチは複雑すぎるようです。代わりに、今日の日付と指定された従業員のカウントを検索します。


SELECT date, COUNT(*) FROM timeRecords 
  WHERE employeeID = 1 AND date BETWEEN DATE_SUB(NOW(),INTERVAL 1 WEEK) AND NOW() 
  GROUP BY date
  ORDER BY date DESC
于 2013-01-21T06:59:01.897 に答える
0

これを試して:

select `date`,DATE_FORMAT(str_to_date(`date`,'%m/%d/%y'),'%W') as ddd from timeRecords where `employeeID` = 1 
and str_to_date('01/20/13','%m/%d/%y') between str_to_date('01/20/13','%m/%d/%y') and date_add(str_to_date('01/20/13','%m/%d/%y'),interval 1 week);

希望する日付の「01/20/13」の値を置き換えます。

于 2013-01-21T09:40:23.620 に答える