超过100时的日期和里程,否则返回红色交通灯

时间:2014-03-19 16:19:58

标签: php mysql sql

这应该很简单,我开始以为它是,但现在我陷入了僵局。

背景,我有一个带有桌子的数据库,用于存放我当前的自行车。我还有一张桌子,用于存放我目前的游乐设施。我通常会加入bike_name列中的两个表格,您将在下面的查询中看到。

今年每辆自行车都有一个世纪的愚蠢目标。

  1. 我想创建一个状态仪表板,每个自行车都带有一个图标 表示已完成,绿色表示是,红色表示否。

  2. 此外,如果是,我想填充ride_date和ride_miles。

  3. 第二个标准很容易做到,我的SQL查询是:

    SELECT r.bike_name,
           r.ride_date,
           r.ride_miles
      FROM rides r
           JOIN bikes b
                ON r.bike_name=b.bike_name
     WHERE DATE_FORMAT(r.ride_date, '%Y')='$current_year' 
           AND ride_miles > 100
    

    这个问题是它只能将骑行(和自行车)拉回到100以上。我可以按下数据制作一个红色图标并发布相关信息。我不能为没有100的人填充红色图标,因为我甚至不知道他们的查询。我一直坐在这里试图考虑这个问题而无法找到一个好的解决方案。我今年刚刚开始搞乱PHP,虽然我已经做了很多,但我想有时候我可能会以复杂的方式做到这一点。

    我的想法是我可以为每辆自行车重写SQL到ORDER BY最长的骑行,获取数据,然后在PHP中使用逻辑来填充我的信息...嗯,也许这就是我需要的操作

1 个答案:

答案 0 :(得分:0)

你可以做一个LEFT OUTER JOIN,这样它只会返回超过100英里的游乐设施的骑行信息,但我想你可能想要打破查询,这样你就可以拥有“一个世纪以来的自行车”他们“和”骑着那些/所有自行车“。但为了让你的原始查询更接近,我会做类似

的事情
SELECT b.bike_name, r.ride_date, r.ride_miles
    FROM bikes b
    LEFT OUTER JOIN rides r ON r.bike_name = b.bike_name 
        AND DATE_FORMAT(r.ride_date, '%Y') = '$current_year'
        AND ride_miles > 100

如果ride_date和ride_miles是NULL,那么你就知道自行车上没有一个世纪。任何至少有一个非NULL ride_date的自行车已经完成了一个世纪。