Php Mysql:在多任务系统中提取非链接数据的最佳实践

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(

我在一个多表中使用了一个大的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(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
,则可以这样做,否则您可以在处理完变量后
取消设置()
,但您可能不需要这样做。