最近项目中的一个表结构是这样的:
CREATE TABLE Category (
id int(11) NOT NULL,
name varchar(50) default NULL,
parent_id int(11) default NULL,
depth int(11),
PRIMARY KEY (id),
FOREIGN KEY (parent_id) REFERENCES Category(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
目录结构是一个典型的树形结构,而树形结构则会涉及到查找的递归问题。当要查找一个节点下所有的子节点的时候(或一个节点上的所有父节点),所谓“所有”即是从该节点之上或之下的任何节点,并不仅仅是其直接父或子节点,就要递归地往上(往下)查找直到目录树的父节点(叶节点)为止。当树的深度和广度都比较大的时候,这样的查找方式显然是比较费时费力的。其实引起这个问题的根本原因就是“一个节点只知道跟它紧邻节点的信息”。导致“树节点”目光如此短浅的罪魁祸首就是肚里墨水太少,消息闭塞,都是吃了没文化的亏啊!对于这样的一个常见问题有没有一个解决办法呢?比较自然会想到的一个方法就是,大力开展九年义务教育,多教教它族谱之类的,譬如“你现在是搞开发的,你老爹是开快餐店的,当初你爷爷可是拉三轮车的哦,你爷爷他爹还是打铁的呢。咱们的日子真是越过越红火啊!儿za,你可得记住,我们都是党的子孙哟”。要记住这么多东西,不多长个心眼那可不行那,因此得再向上面的表添加一个字段:
CREATE TABLE Category (
id int(11) NOT NULL,
name varchar(50) default NULL,
parent_id int(11) default NULL,
depth int(11),
path varchar(500) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (parent_id) REFERENCES Category(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
其中path是这样定义的:
1.若为顶级目录,path为null;
2.否则,则为父目录path+'分隔符‘+父节点id(若父目录就是顶级目录则没有分隔符)
好,假如现在有一个搞开发的他想知道解放前他的祖先是干啥的,因为一开始他爹就跟他讲了好多故事,所以他很快就知道他祖先原来是闹革命的,根本就用不着一层一层往上去查。那么,假如一个想知道开理发店的张大胖他有多少后代呢,只要大声喊一句“诶,理发佬张大胖的后代来报道lei!”,下面听到召唤的“刷”地站直了排上队来还以为搞有奖竞猜呢。
sql语句是这样的:
SELECT * FROM Category WHERE path LIKE 'path%’;
分享到:
相关推荐
在Web环境中部署报表时,经常遇到数据库连接出错的问题。这些问题对于初学者来说尤为棘手,因为它们往往涉及到多个层面的技术细节。本文将针对这些常见的数据库连接问题进行详细的解析,并提供一系列的排查和解决...
- 如果在创建项目时遇到数据库连接失败的问题,可能是由于数据库别名设置不正确导致。解决方法是打开“服务器网络实用工具”,找到正确的数据库别名,并在创建项目时输入这个名称。 综上所述,TD项目数据库创建...
首先,“置疑”状态通常表示数据库在尝试打开时遇到了问题,可能由于硬件故障、操作系统错误、文件权限问题或SQL Server服务异常等导致。SQL数据库置疑解决方案(原因分析、预防措施、修复方法)附图.doc文档可能提供...
当你遇到“SQL2000数据库附件问题”时,可能涉及到多个方面,包括但不限于数据库备份与恢复、文件路径设置、权限问题、数据库引擎错误或者硬件故障等。下面我们将详细探讨这些可能出现的问题及其解决方案。 首先,...
在数据库习题中,你可能会遇到关于基本概念的问题,如什么是数据库、数据模型(如关系模型、网络模型、层次模型)、数据库管理系统(DBMS)以及数据库管理员(DBA)的角色等。 二、数据模型 数据模型是描述数据结构...
在开发过程中,我们经常会遇到数据库中中文字符显示乱码的问题。尤其是在使用PHP连接MySQL数据库时,这一问题尤为突出。本文将详细介绍如何通过PHP来解决数据库读写过程中的乱码问题。 #### 一、问题背景与原因分析...
在进行系统迁移或服务器升级的过程中,经常会遇到数据库移植的问题。对于SQL Server等数据库来说,只要版本一致,通常可以直接进行数据库文件的附加操作来实现迁移。但对于MySQL数据库,情况则有所不同,可能会遇到...
文章共分为八章,分别介绍了系统需求分析、系统总体设计、系统设计、数据库设计、数据库和数据库表创建语法、遇到的问题和解决方法、心得体会和参考文献等内容。 一、系统需求分析 * 系统需求分析是系统开发的第一...
本文将深入探讨在IntelliJ IDEA (简称IDEA) 中连接达梦数据库时遇到的“input string \"8\"”问题,以及如何通过修复驱动程序来解决这个问题。 达梦数据库是一款国产的高性能关系型数据库管理系统,广泛应用于政府...
以上内容不仅涵盖了日常运维中对系统监控、性能优化、安全保护等方面的基本操作,还介绍了在遇到故障时的应急处理方法。在实际操作中,针对不同版本的Oracle数据库,操作命令和视图可能会有所不同,所以具体操作还需...
该问题的解决方法可以从多方面入手,包括数据库设计、连接设置、查询语句优化、应用程序连接设置等。 1. 数据库设计问题 数据库设计问题是导致Sql Server超时的主要原因之一。当数据库文件增长达到一定的规模时,...
在使用Hibernate框架进行数据库操作时,可能会遇到中文乱码的问题。特别是在使用MySQL作为数据库,并且已将数据库编码设置为`utf-8`的情况下,依然出现乱码现象。这不仅影响数据的正确性,也降低了系统的可用性。 #...
当在安装SQL Server过程中遇到“系统挂起”问题时,这通常意味着安装过程遇到了某些阻碍,导致进程无法继续。本文将深入探讨这个问题,并提供解决方案。 首先,系统挂起可能由多种原因引起。可能是硬件资源不足,...
这些问题涵盖了性能优化、安全性、备份恢复、故障排查等多个方面。以下是一些关键的知识点,这些知识点不仅基于我过去一年的经验,也包括了网络上的各种解决方案。 1. **性能优化**:SQL Server的性能问题常常与...
其次,关系型数据库在存储大量连续实时历史数据时可能会遇到问题,如死区管理和数据压缩能力不足。最后,它们可能难以满足生产管理中的实时可视化和工业界面集成需求。 实时数据库则能够克服这些挑战。它们提供针对...
然而,在实际操作过程中,学生们经常会遇到各种挑战,这些问题不仅影响到数据库设计的质量,还可能对后续的信息管理系统开发带来不利影响。本文旨在探讨学生在数据库设计过程中面临的主要问题及其原因,并提出有效的...
遇到数据库表无法保存修改的问题时,通过调整SQL Server Management Studio的设置即可轻松解决。这一问题体现了SQL Server在安全性方面的考量,同时也提醒我们在进行数据库操作时需要谨慎行事,确保数据的安全性与...