仅当与同一ID配对的所有行都有日期时,才从表中选择字段

时间:2016-09-19 23:31:13

标签: php mysql

我正在尝试从数据库中检索一些信息。

我有下表

orderNo   item   shipping
 1050      1     0000-00-00    
 1050      2     0000-00-00
 1050      6     2016-09-18
 2000      2     0000-00-00
 2006      1     2016-09-05
 2006      2     0000-00-00

有些订单与多个商品配对。当项目为2时,我想自动添加发货日期(该功能正常)。但是,只有当所有其他项目都附加了日期时,才需要添加脚本。

例如: - >订单号'1050':第6项有一个日期,但第1项没有日期,所以我们不会将发货日期添加到2 - >订单号'2000':那里只有第2项,所以我们很高兴,将添加发货日期 - >订单号'2006':第1项有一个日期,所以我们也可以在第2项添加日期。

换句话说,当订单的商品不是2时,至少有一个其他配对商品没有发货日期,那么我想忽略它

//adding the shipping date to item 2
$sql = "UPDATE orders 
        SET shipping = '".$shipping."'
        WHERE orderNo = '".$orderNo."' AND item = '2'";
Db::getInstance()->query($sql);

//add some kind of query to check whether shipping of rest items is not zero. If it is '0000-00-00' then do not proceed
SELECT orderNo FROM orders WHERE orderNo = '".$orderNo."' AND shipping in other items than 2 has a date
      //If query returns true then proceed and execute the following
      $new_payment = new itemPayment();
      //else do nothing

所以在上面的查询中,我传递了订单号(例如'1050'),我想知道是否所有其他项目(除了2)都有发货日期。如果他们都进行了,如果没有那么就什么都不做。

我尝试了不同的查询,但没有任何效果。它可以只用mysql查询吗?还是需要一些PHP代码?

如果有什么可以帮助我,或者至少引导我走上正确的道路,我将非常感激。

2 个答案:

答案 0 :(得分:1)

这样的事可以帮到你:

$sql = "Select orderNo from orders where item != '2' AND shipping > '2000-01-01'";

替代:

$sql = "Select orderNo from orders where item != '2' AND shipping > '0'";

答案 1 :(得分:1)

执行此操作的可理解方法是查询:

SELECT orderNo FROM orders WHERE orderNo = '".$orderNo."' AND item !=2 AND shipping>'0000:00:00'

然后运行php num rows以查看与您的查询匹配的行数。如果结果大于0,则意味着您不应该继续