Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 具有Laravel关系的MySQL嵌套集模型_Php_Mysql_Performance_Nested Set Model - Fatal编程技术网

Php 具有Laravel关系的MySQL嵌套集模型

Php 具有Laravel关系的MySQL嵌套集模型,php,mysql,performance,nested-set-model,Php,Mysql,Performance,Nested Set Model,晚上好 我正在开发一个包,该包允许Laravel基于MySQL嵌套集模型lft和rgt键建立关系 图例:X、Y、Z、A、B、C是整数 让我们假设我们希望将其用于eshop类别 我的第一个任务是创建父关系。我已经创建了一个关系,可以找到当前类别的父级。我的查询如下所示: select * from categories where lft < X and rgt > Y order by lft limit 1 以及针对每个类别的父级的一个sql查询: select * from c

晚上好

我正在开发一个包,该包允许Laravel基于MySQL嵌套集模型lft和rgt键建立关系

图例:X、Y、Z、A、B、C是整数

让我们假设我们希望将其用于eshop类别

我的第一个任务是创建父关系。我已经创建了一个关系,可以找到当前类别的父级。我的查询如下所示:

select * from categories where lft < X and rgt > Y order by lft limit 1
以及针对每个类别的父级的一个sql查询:

select * from categories where lft < X and rgt > Y order by lft desc limit 1
并创建如下所示的查询:

select * from categories where (lft < X or lft < Y or lft < Z ...)
and ( rgt > A or rgt > B or rgt > C ...) order by lft desc
但给父母加载则完全不同:

(select * from categories where lft < X and rgt > Y order by lft desc limit 1)
union all 
(select * from categories where lft < A and rgt > B order by lft desc limit 1)
union all...
关系查询:

(select categories.*, X as child_lft, Y as child_rgt from categories
where lft < X and rgt > Y order by lft desc limit 1)
union all
(select categories.*, A as child_lft, B as child_rgt from categories
where lft < A and rgt > B order by lft desc limit 1)
union all...
现在,在PHP端,我有一个数组,包含来自原始查询100项的结果,还有一个数组,包含来自关系查询100项的结果。改进之处在于,现在每个父结果都包含一个类别的lft和rgt键,该类别请求它child_lft和child_rgt。现在,PHP脚本要快得多。首先,我创建了一个新数组,命名为$parents,它包含所有父对象,并且$parents中的每个items key值都是code child\u lft.child\u rgt=>1.5,用于标识请求它的类别。这是一个迭代100次的foreach。第二个foreach遍历原始查询的结果,并检查$parents数组是否包含一个具有适合其lft和rgt键的键的值。再进行100次迭代。总共200次迭代=完美!但是“关系查询”并没有我希望的那么快

那么,还有别的办法吗?或者,有没有一种方法可以使解决方案3中的sql查询更快


谢谢你的阅读。谢谢

您可以使用,它几乎解决了您在Laravel的问题,并且涵盖了大多数角落案例。

晚上好,先生们!咳嗽相当肯定有男程序员和女程序员。我为侮辱女士道歉,我不是故意这么做的。Baum似乎已经死了,但它已经被分叉,目前正在开发:。还有另一个流行的软件包
select * from categories limit 100
(select * from categories where lft < X and rgt > Y order by lft desc limit 1)
union all 
(select * from categories where lft < A and rgt > B order by lft desc limit 1)
union all...
select * from categories limit 100
(select categories.*, X as child_lft, Y as child_rgt from categories
where lft < X and rgt > Y order by lft desc limit 1)
union all
(select categories.*, A as child_lft, B as child_rgt from categories
where lft < A and rgt > B order by lft desc limit 1)
union all...