PHP和SQL过程访问数据量大的表,急!!!!高分求助.
我用PHP和SQL数据库,做一个查询系统.在PHP中提供多个限制条件用户随意选择,其中必须包括一个数量(表示用户要选择多少个编号),然后查询符合条件的产品编号,并将产品编号保存成文本.根据限制条件查询出符合条件的编号并生成文本,我是放在一个SQL过程里做的,在过程的最后返回一个数量表示实际有多少编号被选种.然后在PHP中调用这个过程.
global $database;
$sql="exec update_MobileUserInfo '".$_SESSION['loginname']."','".trim($data[CusID])."','".$citystr."','".$cardstr."','".$tmstr."','".$pricstr."','".$data[SelType][0]."','".$data[RepYN][0]."','".trim($data[IdeNum])."','".$sexs."','".$sexl."'";
$all=$database->GetOne($sql);
if ($all)
{
$result=array($all,$filename);
return $result;
}else {
$this->error = "查询结果为空";
return false;
}
查询大体是这么写的:
SET @strSql='Insert Into ##ServiceTemp(MobileNO) SELECT top '+@IdeNum+' MobileNO '
SET @strSql=@strSql+'FROM A,B,C'
SET @strSql=@strSql+' where A.MobileCard=B.ID and A.MobileType=C.ID and '+@str
SET @strSql=@strSql+' order by MobileNO '
SET @strSql=@strSql+@str3
exec (@strSql)
if @@error <> 0
begin
DROP TABLE ##ServiceTemp
return -1
end
@str是根据传递到过程的参数组合的一个限制条件,我将查询出的具体编号放到全局临时表里等待输出.
上面的代码省略了很多,包括对全局临时表的操作.我为了测试,在过程的最后返回一个具体非零值5.这样就是查询还是按照实际情况查询,但返回的都是成功,5.
目前查询的A表数据有几千万.
症状是当用户输入的想查询的编号数量比较大时,如30万,实际数据库中有足够的数据.可PHP返回的有时就是我设定的5,有时就是;查询结果为空.非常不稳定.这到底是怎么回事呢?