我自定义一个函数pici(),它的作用是:获取到某流水号下的pi字段的值,然后+1(当没有这个流水号的记录时,取值0+1=1)然后依次向数据库中插入几条记录,形式大概为:
流水号 pi 产品部件
1 1 门套..
1 2 门扇..
1 3 线条..
2 1 门套..
2 2 门扇..
2 3 线条..
但是在PHP中,用某页调用的时候,本应该每次都检索数据库,得到的值为1、2、3…… 这样子,可是,获取的值全部为1部分代码附在下面,恳请答疑。先谢谢
这里是自定义函数pici()function pici(){
$SQL = "select ifnull(max(pi)+1,'1') pi from bill where produce_no='预提交'";
$query=mysql_query($SQL);
$rs=mysql_fetch_array($query);
$svc=$rs[pi];
return $svc;
}
下面是调用pici(),然后将3条数据插入数据库//门扇参数
mysql_query("insert into bill (color,series,produce_no,pi,prod_type,stuff_id,z,val,amount,typein) values ('$_GET[color]','$_GET[series]','$produce_no','".pici()."','$prod_type','$norms_stuff_id','门扇型号','$_GET[model_1]','$men_shu','$_SESSION[login_id]')");
//门套参数
mysql_query("insert into bill (color,produce_no,prod_type,pi,stuff_id,z,val,amount,typein) values ('$_GET[color2]','$produce_no','$prod_type','".pici()."','2','门套长','$mentaochang_shu','$mentao_shu_2','$_SESSION[login_id]')");
//线条规格
mysql_query("insert into bill (color,produce_no,prod_type,pi,stuff_id,z,val,amount,typein) values ('$_GET[color3]','$produce_no','$prod_type','".pici()."','3','线条规格','$_GET[norms_3]','$xiantiao_shu','$_SESSION[login_id]')");
流水号 pi 产品部件
1 1 门套..
1 2 门扇..
1 3 线条..
2 1 门套..
2 2 门扇..
2 3 线条..
但是在PHP中,用某页调用的时候,本应该每次都检索数据库,得到的值为1、2、3…… 这样子,可是,获取的值全部为1部分代码附在下面,恳请答疑。先谢谢
这里是自定义函数pici()function pici(){
$SQL = "select ifnull(max(pi)+1,'1') pi from bill where produce_no='预提交'";
$query=mysql_query($SQL);
$rs=mysql_fetch_array($query);
$svc=$rs[pi];
return $svc;
}
下面是调用pici(),然后将3条数据插入数据库//门扇参数
mysql_query("insert into bill (color,series,produce_no,pi,prod_type,stuff_id,z,val,amount,typein) values ('$_GET[color]','$_GET[series]','$produce_no','".pici()."','$prod_type','$norms_stuff_id','门扇型号','$_GET[model_1]','$men_shu','$_SESSION[login_id]')");
//门套参数
mysql_query("insert into bill (color,produce_no,prod_type,pi,stuff_id,z,val,amount,typein) values ('$_GET[color2]','$produce_no','$prod_type','".pici()."','2','门套长','$mentaochang_shu','$mentao_shu_2','$_SESSION[login_id]')");
//线条规格
mysql_query("insert into bill (color,produce_no,prod_type,pi,stuff_id,z,val,amount,typein) values ('$_GET[color3]','$produce_no','$prod_type','".pici()."','3','线条规格','$_GET[norms_3]','$xiantiao_shu','$_SESSION[login_id]')");
说下设计思路吧。
就是个门的订单系统
[color=#003300]1.当用户点了“加入部件列表”,利用ajax插入3条记录,分别是门套、门扇、线条,它们在数据库中为“预提交”的状态。流水号为1
2.当用户再次点击“加入部件列表”:会再插入3条记录,分别是门套、门扇、线条,状态仍然是预提交,流水号仍然为1
3.当用户点击“正式提交”,则将“预提交”全部update为真正的流水号最后的正确结果为:流水号 pi 产品部件 produce_no
1 1 门套..
1 2 门扇..
1 3 线条..
1 1 门套..
1 2 门扇..
1 3 线条..目的是商户下订单的时候,多次选择乱七八糟的部件,能够像购物车一样,暂时登记一下,最后提交时作为1个订单来提交(同一个流水号)
流水号 pi 产品部件
预提交 1 门套..
预提交 1 门扇..
预提交 1 线条..
预提交 1 门套..
预提交 1 门扇..
预提交 1 线条..那个pi的字段,全部是得到了值:1
似乎是只检索了1次数据库,而不是每次调用,每次都去执行pici()里的内容
你可想一想:
如果 max(pi) 为 null 因为是“预提交”,pi 无值
那么 null + 1 等于什么呢?
如果等于 null 那么就返回 '1'
如果等于 1 那还是返回 1
是这样的吧?你若想使 pi 递增,应统计非预提交的记录个数再加 1
2.select ifnull(max(pi)+1,'1') from bill where 1=2;原因分析:先去分析被ifnull括起来的max(pi)+1,因为记录为空,所以更就没有max()的记录了。最后被ifnull判断是空的,赋值为1总之你说的max在外面,是在数据库中已经存在空值的记录时,才适合使用;反之如果表中没有记录,则要full在外,才会得到替代的数值。
我在2楼写希望得到的结果时,写错了。正确的应该是:流水号 pi 产品部件 produce_no
1 1 门套..
1 2 门扇..
1 3 线条..
1 4 门套..
1 5 门扇..
1 6 线条..
是指同一流水号下,pi字段递增
能出结果才怪呢?
你去问问你的同事,他们会告诉你你哪里错了
select ifnull(max(pi)+1,'1') pi from bill where produce_no='预提交'因为有2种情况:
1.表中不存在product_no='预提交'的数据,所以可以视为1=2
2.表中存在了product_no='预提交'的数据,所以就不会取到控制,直接取字段pi的最大值max(pi)所以SQL才用了ifnull(max(pi)+1,'1')
不是哦。不是1=2,我是为了代码发到这里,便于查看,才用了1=2其实应当是这样的
select ifnull(max(pi)+1,'1') pi from bill where produce_no='预提交'因为有2种情况:
1.表中不存在product_no='预提交'的数据,所以可以视为1=2
2.表中存在了product_no='预提交'的数据,所以就不会取到空值,直接取字段pi的最大值max(pi)所以SQL才用了ifnull(max(pi)+1,'1')