Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用下一行值检查mysql值_Php_Mysql - Fatal编程技术网

Php 使用下一行值检查mysql值

Php 使用下一行值检查mysql值,php,mysql,Php,Mysql,我有一个名为cm的mysql表 CREATE TABLE `cm` ( `id` int(10) NOT NULL, `chit_no` varchar(30) DEFAULT NULL, `pjt_no` varchar(20) DEFAULT NULL, `design` varchar(25) DEFAULT NULL, `item` varchar(25) DEFAULT NULL, `process` varchar(10) DEFAULT NULL, `t

我有一个名为cm的mysql表

CREATE TABLE `cm` (
  `id` int(10) NOT NULL,
  `chit_no` varchar(30) DEFAULT NULL,
  `pjt_no` varchar(20) DEFAULT NULL,
  `design` varchar(25) DEFAULT NULL,
  `item` varchar(25) DEFAULT NULL,
  `process` varchar(10) DEFAULT NULL,
  `times` int(1) DEFAULT NULL,
  `current_position` int(1) DEFAULT NULL,
  `current_stage` int(1) DEFAULT NULL,
  `qty` int(10) DEFAULT NULL,
  `dmg` int(2) DEFAULT NULL,
  `bbelt` varchar(10) DEFAULT NULL,
  `fdate` date DEFAULT NULL,
  `remarks` varchar(500) DEFAULT NULL,
  `shift` int(1) DEFAULT NULL,
  `date` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
表视图

此表包含100K条记录。对于特定的日期范围,我只想得到Process=firming,last_record=1,qty>0,next record qty=0的行

这段代码我已经试过了,但是没有输出

 $sql =mysql_query("SELECT * 
                      FROM cm  
                     WHERE  (    process='Firing' 
                             AND qty>0 
                             AND last_record='1'
                            ) 
                        AND 1>(SELECT qty 
                                 FROM cm 
                                WHERE id=id+1)  
                        AND fdate BETWEEN '$from' AND '$to' 
                   ORDER BY cm.id,design, item,chit_no")
        or die ("err1");

首先,需要注意的是,在SQL Server中永远不会有下一条记录,除非您根据存储数据的知识定义它

MySQL倾向于按照添加记录的相同顺序为您提供未排序的记录,但您永远不知道

因此,首先,我们必须根据图像中的数据定义下一个记录,我猜您想要的是基于id的下一个记录。如果您知道,每个记录的id增加一个,并且记录从不被删除,那么我们可以很容易地找到下一个记录

select
  c.*
from
  cm c
where
  c.process='Firing'
and
  c.last_record=1
and
  c.qty>0 /*easy part done*/
and
  exists (select id from cm c2 where c2.id=c1.id+1 and c2.qty=0)
如果您可以基于id序列中没有间隙这一事实进行查询,那么这将得到您想要的结果

我真的不知道这是什么类型的应用程序,但由于您想根据下一行比较和选择行,我想记录是如何分组的,如何设计id?下一个记录可能不仅仅基于id,还应该考虑设计等因素

如果您的id序列中有间隙,或者需要对记录进行分组以定义下一个,那么您的查询将慢得多,但您可以执行以下操作:

select
  c.*
from
  cm c
where
  c.process='Firing'
and
  c.last_record=1
and
  c.qty>0 /*easy part done*/
and
  exists (select id from cm c2 where c2.Id=(select min(id) from cm c3 where c3.id>c.id and c3.design=c1.design) and c2.qty=0)

如果可能,请重新评估您的数据模型/bis逻辑

我认为第1部分>从cm中选择数量,其中id=id+1应更改为0=从cm中选择数量,其中id=id+1这很好,导致了什么错误?非常奇怪,您按cm.id、设计、项目订购,说明否id不是唯一的/主要的吗?$from和$to的值是多少?$from和$to是两天