2016-10-21 35 views
0

我需要一个帮助。我需要使用PHP和MySQL根据day and date从数据库获取数据。我在下面解释我的表格。如何使用PHP和MySQL按日期和日期过滤数据库中的数据

db_day:以上

day_id day_name 

    1  Monday 

    2  Tuesday 

    3  Wednsday 

    4  Thursday 

    5  Friday 

    6  Saturday 

    7  Sunday 

是我一天的表。

db_special:

id restname  date_from   date_to  day_from day_to 

1  aaa   2016-09-22  2016-09-26  1   4 

2  bbb   2016-10-19  2016-10-28  2   5 

3  ccc   2016-10-18  2016-10-25  4   7 

以上是我的两个表。假设用户有输入Tuesday,它需要从上表中获取日期范围内的值。这里如果用户只有输入Tuesday,首先它应该计算日期和日期。如果假设今天是Friday它会考虑下一个Tuesday起。这里的用户输入只是Tuesday,所以它会计算今天的日期e.g-2016-10-21,然后将从上表中筛选出值。根据这个例子的预期结果应该是这个表中的bbb 2016-10-19 2016-10-28 2 5行。在这里我需要这个查询来解决这个问题。请帮帮我。

+0

如果用户输入的是星期二什么是从db_special选择逻辑是什么?为什么如果今天是2016-10-21,结果应该是'bbb 2016-10-22 2016-10-28 2 5'? – krasipenkov

+0

@krasipenkov:因为看到'day_from和day_to'。它在星期二到星期五'按照'db_day'表格。 – satya

+0

@krasipenkov:这里逻辑是如果用户输入是“星期二”。今天的日期应该与日期范围匹配,并且输入日期将与'db_special'表中的日期范围匹配。 – satya

回答

0

您可以使用此代码尝试:

// $db is PDO instance 
// $userDay is user input day 

$todayDayId = date('N'); 
$stmt = $db->prepare('SELECT day_id FROM db_day WHERE day_name=:userDay'); 
$stmt->execute([':userDay' => $userDay]); 
$userDayId = $stmt->fetchColumn(); 

if($todayDayId > $userDayId) { 
    $diff = (7-$todayDayId) + $userDayId; 
} 
else { 
    $diff = $userDayId - $todayDayId; 
} 

$wantedDate = date('Y-m-d', strtotime('+'.$diff.' day')); 

$pdoData = [ 
    ':wantedDate' => $wantedDate, 
    ':wantedDate2' => $wantedDate, 
]; 
$stmt = $db->prepare('SELECT id, restname, date_from, date_to, day_from, day_to 
         FROM db_special 
         WHERE date_from>=:wantedDate AND date_to<=:wantedDate2'); 
$stmt->execute($pdoData); 
$result = $stmt->fetchColumn(); 
+0

让我试试这个,让你知道。 – satya