mysql - 选择行直到列值不相同

标签 mysql

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 循环检查该行的列是否等于“坏”(如果它做了某些事情)(可能可以使用数组来填充用数据来解决)。如果不是,则循环已损坏。

我知道这看起来并不理想,但它确实有效,哈哈

   while ($row = mysqli_fetch_assoc($result)) {
    if ($row['status'] == "bad") {
    $counter += 1;
    }
    else{
break;}

最佳答案

我将仅用您的输出提供答案,就好像它只是一张表一样。它将为您提供如何解决问题的主要想法。

基本上,我创建了一个名为 ord 的列,它将用作 row_number (据我所知,MySql 还不支持它)。然后我得到了不良状态的最小 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 状态为第一个结果的用例进行了测试,不会返回任何结果。

在这里查看它的工作情况:http://sqlfiddle.com/#!9/28dda/1

关于mysql - 选择行直到列值不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43082029/

相关文章:

php - 具有多个 'OR' 语句的 MySQL 查询

php - 不知道如何从 mysql 中回显所选数据

mysql - 如何维护数据库中的重复记录?

php - 如何将两个查询合并在一起以分页显示一组数据

php - 循环遍历 MySQL 结果循环

Mysql插入/更新不同的十进制值

Mysql - 从表中删除除所有 post_id1 的 2 行之外的所有内容

php - 想要在 php 输入中使时间部分可选

php - 如何从mysql数据库在JPGraph中添加标题

php - 想要一个 while 循环仅在表中显示数据库中的商店列表