【问题标题】:from date to date - search and display从日期到日期 - 搜索和显示
【发布时间】:2013-02-19 12:20:33
【问题描述】:

我有一个包含两个信息的数据库。从今天到今天。我每天都需要这个条目出现在我的日历中,但我只能设法在第一个和最后一个日期出现。

数据库示例:

   job_no | date1(from)| date2(to)
   ________________________________
   1      |2013-01-28  | 2013-02-03
   2      |2013-01-14  | 2013-01-18

编辑问题。我的搜索栏允许输入一个日期,日历通过 date1 和接下来的 6 天查找条目。

我无法进行包含两个日期输入的搜索,因为我的用户已经习惯了这种方式,我不想增加搜索时间。我开始认为我必须找到日期之间的日期,将其添加到 array 然后使用 if statement 来查找匹配项......但即使这样说对我来说也没有任何意义。

关于工作 1,我需要我的日历在 28/29/30/31/01/02/03 的所有日期显示该工作。

我当前的搜索 SELECT * FROM jobs WHERE date1='$searchinput' PER day 并日历此搜索。我使用 strtotime 将输入日期增加 +1 以添加到每天的搜索中。

日历页面。

我想要的结果。用户搜索日期 28 日。

 Mon 28          |      Tues 29     |    Wed 30     ...... | Fri 03    |
_________________________________________________________________________
   Job no 1      |      job no 1    |   job no 1    ...... | job no 1

我现在拥有的。

  Mon 28       |      Tues 29     |    Wed 30     ...... | Fri 03    |
    _________________________________________________________________________
 Job no 1      |      blank       |      blank           | job no 1

现在每天都有一个新的选择查询。它与日期 1 和日期 2 相匹配。我不像以前那样需要这个,我只有一天的工作,现在他们出去超过一天,需要在所有日子里记录工作,它只使用一个工作日期和工作日期。

编辑 2:

SELECT * FROM calender_db NATURAL JOIN job_db 
WHERE section='two' 
AND date1 < '$day' AND date2 > '$day' 
OR date1 = '$day' OR date2 = '$day' 

此查询选择我需要的内容,但当我使用 OR 时,第一个 WHERE CLAUSE 可以为空。我需要它始终在条款中。我一直在研究使用IIFCASE 来纠正但不知道如何实现100%...?

【问题讨论】:

  • 你必须用引号包围$date1 & $date2。例如$date1 = '2013-01-28';
  • 您能展示一下您目前拥有的代码吗?也许这会更好地解释你想要做什么。
  • 根据您的第二次更新更新了我的答案。

标签: php mysql sql case


【解决方案1】:

为什么不使用BETWEEN

SELECT * FROM tableName WHERE date BETWEEN 'date1' AND 'date2'

更新 1

SELECT * 
FROM tableName 
WHERE date BETWEEN '2013-01-28' AND '2013-01-28' + INTERVAL 6 DAY

【讨论】:

  • 我根本没有正确地问我的问题。这回答了上述问题,但我需要的要复杂得多。
  • 这可能是什么问题? :D
  • edit 并不能满足我的需要。我每次都试图以更好的方式发布我的问题。我觉得我不擅长这个。
【解决方案2】:

要生成两个日期之间的天数列表:

$days = array();
$stop = strtotime($date2);
for ($current = strtotime($date1); $current <= $stop; $current = strtotime('+1 days', $current)) {
    $days[] = date('d', $current);
}
echo join('/', $days);

Demo

更新

误解了这个问题,如果两个日期都存储为列并且您使用单个日期进行查询:

SELECT *
FROM jobs 
WHERE 'date_from_input' BETWEEN date1 AND date2

更新 2

您的最新查询可以写成:

SELECT * 
FROM calender_db NATURAL JOIN job_db 
WHERE section='two' AND '$day' BETWEEN date1 AND date2

【讨论】:

  • 我使用了你的第一次更新,然后做了第二次,完美。头部现在可以停止分成两半了
【解决方案3】:

这样试试

SELECT * FROM Mytimetable WHERE date BETWEEN 'date1' AND 'date2'

【讨论】:

    【解决方案4】:

    date1 - date2之间的查询

    SELECT *
    FROM `objects`
    WHERE (date_field BETWEEN '2013-01-30 14:15:55' AND '2013-02-19 10:15:55')
    
    OR
    
    SELECT *
    FROM `objects`
    WHERE (date_field BETWEEN date1 AND date2)
    

    【讨论】:

      【解决方案5】:

      查询以使用 PHP 变量选择两个日期之间的日期。 我会用例子来解释:

      $date1 = "2013-02-19"; $date2 = "2013-02-25";

      那么 sql 查询将是:

      $query  = " SELECT * FROM table_xyz where (date_item BETWEEN date('".$date1."') AND date('".$date2."')";
      

      希望能解决你的问题

      【讨论】:

        【解决方案6】:
        SELECT 
           * 
        FROM 
           tablename 
        WHERE 
           date between '$date1' and '$date2' 
        order by 
          date
        

        【讨论】:

        • 请添加您的答案的解释,而不仅仅是代码。谢谢。
        • @Dave 我要偷这个来审查:P。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-20
        • 2023-01-05
        • 2022-06-20
        • 2019-01-28
        相关资源
        最近更新 更多