如何在找到特定数据的情况下运行查询

时间:2016-08-03 14:17:18

标签: php mysql

也许这听起来很疯狂,但我无法想出一个更好的头衔。

我单击一个按钮,我向查询发送一个日期(Ymd),查询是否找到数据,如果找到数据,它会返回数据,如果没有找到数据,则返回null。

现在我想这样做,如果我发送的日期没有可用的数据,那么将返回数据实际存在的下一个日期。

所以实际上我发送了8月30日的搜索,如果8月30日没有数据,查询应该在过去的第二天搜索可用数据,所以如果它在8月2日找到数据,那么数据8月2日应归还。

我试过"日期< =实际日期"和"如果结果== 0"等等,但我只是在黑暗中攻击。 返回始终是一堆数据,而不仅仅是一行。

我的代码现在看起来像这样:

$category = $_GET['category'];
$query = mysqli_query($bd, "SELECT MAX(datum) as max_datum, MIN(datum) as min_datum FROM macapps WHERE free = 1 AND category = '".$category."' ") or die(mysqli_error());
$date = mysqli_fetch_assoc($query);

$day = isset($_GET['date']) ? $_GET['date'] : 0;
$date = date('Y-m-d', strtotime($date['max_datum'] . ' ' . $day . ' day'));

$result = mysqli_query($bd, "SELECT appID, title, icon, category, datum FROM macapps WHERE datum =  '".$date."' AND free = 1 AND category = '".$category."' ORDER BY title") or die(mysqli_error());
$rows = array();
while($count = mysqli_fetch_assoc($result)) {
    $rows[] = $count;   
}

echo json_encode($rows);

1 个答案:

答案 0 :(得分:2)

尝试此查询

Select 
      appID, title, icon, category, datum 
From 
      macapps 
Where datum = (Select 
                     m.datum 
               From 
                     macapps m 
               WHERE
                     m.datum <= '.$date.'
               Order By m.datum Desc
               LIMIT 1
             )
And
    Free=1
And
    category = '.$category.'
Order By title;

另一个查询

Select 
      appID, title, icon, category, datum 
From 
      macapps 
Where datum = (Select 
                     Max(m.datum)
               From 
                     macapps m 
               Where
                     m.datum <= '.$date.'                   
             )
And
    Free=1
And
    category = '.$category.'
Order By title