php上下属对应关系,由主分类 ID 取出(多个)下级子分类所对应的项,有没有什么好的办法?(其实似乎和 PHP 没什么直接关系?)...

有一个表结构比如:

```

项目:

项目ID

项目名

分类ID

...

```

```

还有一个多级分类结构:

分类1

+ 分类1.1

++ 分类1.1.1

+++ 分类1.1.1.1

+++ 分类1.1.1.2

+ 分类1.2

分类2

...

```

假定我现在有分类1的序号,现在想通过这个序号取出对应分类1及其子项中的所有项目的列表,请问有没有什么方便快捷的解决方案?最好能O(1)解决的。

目前想到的方法:

1、项目里新增一个字段(暂时称为“分类路径”),存储一个线性数据,用来储存分类的路径,数据比如:分类1[分隔符]分类1.1[分隔符]分类1.1.1。做查询的时候用LIKE从左开始匹配。

比如进到“分类1”的时候,搜索`分类路径` = "分类1[分隔符]*"。

进到“分类1.1”的时候,搜索`分类路径` = "分类1[分隔符]分类1.1[分隔符]*"。

但是LIKE这样算不算滥用什么的?+ 如果迁移到一个没有LIKE的数据库不就歇菜了么。

2、新建一个数据表,类似于:

```

项目分类路径们:

项目ID

隶属于分类

```

然后当写入项目的时候,爬出所选目标分类的路径树,比如

当一个项目被分配到“分类1.1.1.2”这个分类下,则依次写入记录:

```

项目ID:001

隶属于分类:分类1.1.1.2

项目ID:001

隶属于分类:分类1.1.1

项目ID:001

隶属于分类:分类1.1

项目ID:001

隶属于分类:分类1

```

相当于空间换时间了。但是这样的话:

1、如果未来这个项目要变更分类记录,就变得麻烦了,得删掉之前所有的记录,然后重新爬表(虽然可以优化掉一部分查询);

2、得维护一张分类的全表树形(或至少部分树)结构的缓存来让路径计算变得更快一些、并借此降低用来获得路径的数据库查询次数,这很显然增加了系统复杂度(因为需要处理比如缓存更新等等这样的情况)。

好吧各位。所以我想的两个方案都有缺点,你有啥办法呢?请分享下见解。谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最长无重复字符子串?

2019独角兽企业重金招聘Python工程师标准>>> 题目要求: 给定一个字符串S,在该字符串中找到一个最长的没有重复字符的子串。 转载于:https://my.oschina.net/datacube/blog/875545

history of Program

1951 – Regional Assembly Language  1952 – Autocode  1954 – IPL (LISP语言的祖先)  1955 – FLOW-MATIC (COBOL语言的祖先)  1957 – FORTRAN (第一个编译型语言) 1957 – COMTRAN (COBOL语言的祖先)  1958 – LISP  1958 – ALGOL 58  1959 – FACT (COBO…

销售探讨_让我们一起探讨编程资源的领域

销售探讨by Quincy Larson昆西拉尔森(Quincy Larson) 让我们一起探讨编程资源的领域 (Let’s explore the universe of programming resources together) 有很多免费的编程资源。 (There are a lot of free programming resources out there.) Here’s a list of more than a …

利用yii2 gridview实现批量删除案例

作者:白狼 出处:http://www.manks.top/article/yii2_gridview_deleteall本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 今天仍…

php中tp框架的坑,tp5框架遇到的一些坑

最近这个项目确实是问题多多!新项目的上线到测试,基本都是一个人去弄!面对40多万条的数据,mysql跑起来确实没有那么快!首先来介绍一下我的项目吧!其实项目比较简单 主要就是在已有的平台开放类似于百家号&…

BZOJ 4811 树链剖分+线段树

思路: 感觉这题也可神了.. (还是我太弱) 首先发现每一位不会互相影响,可以把每一位分开考虑,然后用树链剖分或者LCT维护这个树 修改直接修改,询问的时候算出来每一位填0,1经过这条链的变换之后得…

selenium框架安装及webdriver安装

本文介绍的是selenium安装及webdriver安装、小实例 1、selenium介绍 selenium是一个用于web应用程序测试的工具。 Selenium测试直接运行在浏览器,就向真正的用户操作一样。 支持的浏览器包括IE(7,8,9,10,11),Mazilla Firefox,Safari,Google Chrome,OperaL浏览器 这个…

idead断点调试_IDEA---断点调试Debug

Debug调试程序:可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug使用方式:在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪里有bug添加到哪里)右键,选择Debug执行程序程序就会停留在添加的第一个断点处执行程序:f8:逐行执行程序f7:进入到方法中shiftf8:跳出…

svd medium_我们刚刚放弃了Medium博客。 您可能也应该这样做。

svd mediumOur blog helped our open source community reach an early critical mass.我们的博客帮助我们的开源社区达到了早期的临界质量。 In the 18 months since we launched our blog, it’s been viewed half a million times.自我们发布博客以来的18个月里&#xff0c…

写文件 追加和换行

file_put_contents("log.txt", "Hello world everyone.".PHP_EOL, FILE_APPEND); 转载于:https://www.cnblogs.com/yixi978/p/5422504.html

突然想到了王自如

刚刚不知道为什么突然想到了王自如。可能是因为下午在腾讯视频首页看到了老罗罗永浩的一个访谈节目,然后神经元一短路的原因吧。 想到王自如不禁又联想到了王自如和罗永浩的那场著名的撕逼之战。场面上王自如是被罗老师教做人的一个结果。然后就很长时间没有听到关于…

UOJ Test Round 3

A.几何冲刺 感觉自己的智商爆炸。 显然是按照极角序排列之后依次加点&#xff0c;判断是否有点。 保证一个点在两个角的范围内就OK了啊&#xff0c;想了半天叉积。。。 #include "triangles.h" #include <bits/stdc.h> #define for1(a,b,i) for(int ia,end_b;i…

万能素材库_自媒体运营必备3款黑科技工具,一个万能素材网站,你都在用吗?...

原标题&#xff1a;自媒体运营必备3款黑科技工具&#xff0c;一个万能素材网站&#xff0c;你都在用吗&#xff1f;现在刷短视频几乎是我们每个人每天必做的一个娱乐方式了&#xff0c;也有很多的小伙伴加到我问&#xff0c;怎么做抖音&#xff0c;抖音怎么运营&#xff0c;那么…

java怎么处理ajax请求,java怎么用ajax请求?jquery ajax请求后台的简单例子

jQuery.ajax(url,[settings])概述通过 HTTP 请求加载远程数据。jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数&#xff0c;除非你需要操作不常用的选项&#xff0c;以获得更多…

训练代码_代码简介:是的,有完全免费的代码训练营

训练代码Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事&#xff1a; You might not need that $15K coding bootcamp: 6 minute read 您可能不需要$ 15K的编码训练营&#xff1a; 6分钟的阅读时间 How a b…

MySQL(五) —— 子查询

子查询&#xff08;SubQuery&#xff09;是指出现在其他SQL语句内的SELECT语句。 如&#xff1a; SELECT * FROM t1 WHERE col1 (SELECT col2 FROM t2); 其中 SELECT * FROM t1,称为Outer Query/Outer Statement SELECT col2 FROM t2,称为SubQuery 子查询指嵌套在查询内部&…

PPP认证方式pap chap chap2

2019独角兽企业重金招聘Python工程师标准>>> PPP点到点协议&#xff08;Point to Point Protocol&#xff0c;PPP&#xff09;是IETF&#xff08;Internet Engineering Task Force&#xff0c;因特网工程任务组&#xff09;推出的点到点类型线路的数据链路层协议。它…

Nexus-配置vPC 实验三

配置EvPC&#xff08;增强的vPC&#xff09;&#xff0c;下面两个FEX可以同时被两个N5K管理。注意&#xff1a;FEX只支持静态的Channel-group&#xff08;mode on&#xff09; N5K-1配置&#xff1a;配置FEXN5K-1&#xff08;config&#xff09;#feature fexN5K-1&#xff08;c…

python中字符串转xml对象_Python实现对象转换为xml的方法示例

本文实例讲述了Python实现对象转换为xml的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;# -*- coding:UTF-8 -*-Created on 2010-4-20author: 忧里修斯import xml.etree.ElementTree as ETimport xml.dom.minidom as minidomfrom addrbook.domain import Person…

python现在时间 命令,Python 日期格式和时间以及当前时间和时间戳

Python 程序在运行的时候可能需要获得当前的时间。在这个时候我们需要导入 datetime 包。获得当前时间例如&#xff0c;可以使用下面的代码获得当前的日期。today datetime.date.today()print("Todays date:", today)在上面的代码中&#xff0c;将会输出&#xff1a…