这应该很简单,我开始以为它是,但现在我陷入了僵局。
背景,我有一个带有桌子的数据库,用于存放我当前的自行车。我还有一张桌子,用于存放我目前的游乐设施。我通常会加入bike_name
列中的两个表格,您将在下面的查询中看到。
今年每辆自行车都有一个世纪的愚蠢目标。
我想创建一个状态仪表板,每个自行车都带有一个图标 表示已完成,绿色表示是,红色表示否。
此外,如果是,我想填充ride_date和ride_miles。
第二个标准很容易做到,我的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中使用逻辑来填充我的信息...嗯,也许这就是我需要的操作
答案 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的自行车已经完成了一个世纪。