Php Mysql:在多任务系统中提取非链接数据的最佳实践
我在一个多表中使用了一个大的select,在这个多表中我有很多行,我需要告诉您没有表被链接。我需要提取每个元素并将其添加到数组中 我的问题是: 当我使用此选项时:Php Mysql:在多任务系统中提取非链接数据的最佳实践,php,mysql,mysqli,Php,Mysql,Mysqli,我在一个多表中使用了一个大的select,在这个多表中我有很多行,我需要告诉您没有表被链接。我需要提取每个元素并将其添加到数组中 我的问题是: 当我使用此选项时: mysql> select w.*,s.*,p.*,h.*,c.*,b.*,o.* from `base` b,`chain` c,`house` h, `option` o,`piece` p,systems s, `wall` w; 有时,我会在执行后得到以下查询: 错误2008(
mysql> select w.*,s.*,p.*,h.*,c.*,b.*,o.* from
`base` b,`chain` c,`house` h,
`option` o,`piece` p,systems s,
`wall` w;
有时,我会在执行后得到以下查询:
错误2008(HY000):MySQL客户端内存不足
执行此函数大约需要1分钟,获取数组结果大约需要1分钟
在那之后,我需要使用类似于:
$base = $chain =
$house = $option=
$piece= $systems =
$wall = array();
while($row = $data->fetch_array(MYSQLI_ASSOC)) {
//build all array properly
}
是否有可能减少执行时间?最好对我需要提取的每个表使用一个查询,并将行推送到“good”数组中
谢谢
**编辑**
我也试过这个,但都是一样的:
mysql> select w.*,s.*,p.*,h.*,c.*,b.*,o.* from
`base` b INNER JOIN `chain` c INNER JOIN `house` h INNER JOIN
`option` o INNER JOIN `piece` p INNER JOIN systems s INNER JOIN
`wall` w;
如果不使用join in from语句或join in where语句,mysql将使这些表中的所有行发生变化,这将导致内存损坏!
如果您加入了这些表,则不会收到错误消息。您应该对每个表进行查询
您提到的查询执行笛卡尔连接,这几乎肯定不是您想要的。在笛卡尔联接中,每一行都有来自每个表的数据,总行数是每个表的总行数的乘积(即,如果每个表有10行,查询将返回10000000行)。脚本内存不足,因为您的查询获取的数据是您实际感兴趣或使用的数据的数倍
对每个表使用一个查询只能获取您想要的数据,而且应该可以工作,而且速度更快。但是我没有链接表的ID\u对象
,所以我不能使用“ON”
也可以吗?然后您可以在表中一次查询一个,您只是想从每个表中获取所有数据,还是有充分的理由使用笛卡尔联接?对不起,我想将表1放入数组1,所有行,所有合谋,表2放入数组2。。。等我不确定一个查询调用7次或8次是否是更好的做法,或者我需要将其最小化。。但是我当前的SQL使用了大量内存,而且需要时间。是的!没错!。谢谢你的回答!我需要$data->free()代码>每次查询之后?或者如果我重写$data
我到底能做什么?你不需要在每次查询后调用free()
。当没有对数据的引用时,它将被自动清除。如果您为每个查询覆盖$data
,则可以这样做,否则您可以在处理完变量后取消设置()
,但您可能不需要这样做。