迭代MySQL列中的重复条目

时间:2013-01-21 06:50:02

标签: php mysql

我是编程新手,所以我的问题可能有一个简单的解决方案。

我想要完成的是在MySQL列中找到重复的字段条目,条目将是日期示例01/20/13

我需要搜索日期字段并确定日期有多少重复条目,然后找出我需要创建一个循环,将日期更改为日期的日期名称然后在.

之后添加.和一个数字

所以例如01/20/13是星期日所以在我的数据库示例中有4个重复的条目,所以输出需要Sunday.1, Sunday.2, Sunday.3, Sunday.4

我在下面的PHP程序中使用此功能,但我需要它在7天范围示例01/20/13 - 01/26/13中搜索重复项,从星期日开始到星期六结束。我不想硬编码一周价值的日期值。这就是我的问题所在,我不知道从哪里开始我被卡住了。我只能想到为了获得理想的结果而对数周的价值进行硬编码,但我知道有一种更简单的方法。

我的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    |
+----+------------+----------+--------+-------------------+-----------+------------+-----------+---------+

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

替换&#39; 01/20/13&#39;的值你想要的日期。