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.pswp.cn/news/396215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396215.shtml
英文地址,請注明出處:http://en.pswp.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…