无限类别层次结构的动态JOIN

时间:2019-01-07 03:14:43

标签: mysql mariadb hierarchical-data

在SQL中支持动态/无限数量的类别是否值得,或者与仅在PHP中创建多维数组相比,性能优势可忽略不计?

CREATE TABLE `categories` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`parent_id` INT(11) NOT NULL DEFAULT '0',
`name` TINYTEXT NOT NULL DEFAULT '0' COLLATE 'utf8mb4_unicode_520_ci'
PRIMARY KEY (`id`)
) COLLATE='utf8mb4_unicode_520_ci' ENGINE=InnoDB;

在PHP中,我可以简单地SELECT * FROM categories ORDER BY id_parent ASC;并创建新的数组来使用(例如,显示所有类别的索引)。

我也没有看过任何教程来演示如何从SQL的平面数组样式动态构建层次结构。

这本来似乎是合理的(假设为手动添加了对每个深度级别的JOIN子句的容忍度),而无需添加太多卷积。虽然我在质疑我是否正确地处理了该查询,还是应该通过PHP构建层次结构:

SELECT 
s1.name AS name1, s1.url AS url1, 
s2.name AS name2, s2.url AS url2, 
s3.name AS name3, s3.url AS url3, 
s4.name AS name4, s4.url AS url4, 
FROM categories AS s1 
LEFT JOIN categories AS s2 ON (s2.parent_id = s1.id) 
LEFT JOIN categories AS s3 ON (s3.parent_id = s2.id) 
LEFT JOIN categories AS s4 ON (s4.parent_id = s3.id) 
WHERE s1.url='first';

这不是 一个时间敏感的问题,这是一个面向质量的问题(发布后三天内我将无法对此进行处理)。我显然很在乎性能,尽管在这一点上,更多的是试验,看看是否可以利用SQL扩展我的技能并以某种方式在帮助下实现这一目标。

如果SQL可以实现无限的类别层次结构,我将如何获取数据?从table创建多维数组会容易得多,尽管更容易成为人生的正确道路。

0 个答案:

没有答案