SELECT product.productID
, product.Name
, product.date
, product.status
FROM product
INNER JOIN shelf ON product.sheldID=shelf.shelfID
WHERE product.weekID = $ID
AND product.date < '$day'
OR (product.date = '$day' AND shelf.expire <= '$time' )
ORDER BY concat(product.date,shelf.expire)
我试图以特定值停止SQL语句,例如坏。
我尝试过使用max-date,但是我发现它很难在查询中创建时间戳。 (结合日期/时间)
此示例表显示应返回3个结果,如果状态“bad”是第一个结果,则不应返回任何结果。 (按日期和时间排序。)
ProductID Date status
1 2017-03-27 Good
2 2017-03-27 Good
3 2017-03-26 Good
4 2017-03-25 Bad
5 2017-03-25 Good
更新
想想我可能已经修好了,我把它添加到我的while循环中。
查询按照现在的顺序给出过去使用日期和时间的结果,这个while循环检查该行的coloumn是否等于'bad'如果它做了什么(可能能够使用数组填充它与数据)。如果不是循环被打破。
我知道dosnt看起来很理想,但它有效lol
while ($row = mysqli_fetch_assoc($result)) {
if ($row['status'] == "bad") {
$counter += 1;
}
else{
break;}
答案 0 :(得分:1)
我将只为您的输出提供答案,就像它只是一个表一样。它将为您提供如何解决问题的主要思路。
基本上我创建了一个名为ord
的列,它将作为row_number(MySql不支持AFAIK)。然后,我得到了一个糟糕状态的最小ord
值,然后我从ord
小于该值的数据中得到了所有内容。
select y.*
from (select ProductID, dt, status, @rw:=@rw+1 ord
from product, (select @rw:=0) a
order by dt desc) y
where y.ord < (select min(ord) ord
from (select ProductID, status, @rin:=@rin+1 ord
from product, (select @rin:=0) a
order by dt desc) x
where status = 'Bad');
结果将是:
ProductID dt status ord
-------------------------------------
1 2017-03-27 Good 1
2 2017-03-27 Good 2
3 2017-03-26 Good 3
还使用Bad
状态是第一个结果的用例进行测试,不会返回任何结果。