mysql資料庫查詢

2021-08-20 23:18:05 字數 2485 閱讀 3687

這一段時間在實習的公司裡和別人共同開發乙個新功能,我主要偏資料庫操作!其中有乙個是對資料的校驗,而這些資料在資料庫裡是以樹的形式存在!沒有問別人之前我是打算以迴圈的方式來做,週日花了整整一下午把資料表研究了一番發現不是我想象的那麼簡單,我先把這個要求簡單的描述一下:

首先是資料表裡的資料,欄位太多,我只查出一些有用的字段:

id是主鍵是主鍵由資料庫自動生成,itemtype是型別,這些資料又兩種型別,乙個是分類,乙個是條目(下一張會明白),name是名稱,parentid是直屬上級id(要是之前有接觸過樹形結構資料表的,會對parentid很熟悉)

再來是資料需要顯示的效果:

沒錯,這是excel**,可以講上面的資料和這個**對應起來比較一下,每行內容後面的資料是我手動新增上去的,代表的是當前的id。

簡單的解釋一下,parentid為空的代表a列,也就是最高端節點,比如id為8和9的,然後parentid為8或9的就是b列的資料,然後是c列, 以此類推。。。最末級成為條目itemtype為1,其餘的為分類,itemtype為0,上圖8~13就是分類,14~23就是條目,介紹完了,下面是要求,每乙個條目(包括本身)的所有上級,必須有且只有乙個分類或條目指定有效基分(有效基分是其他資料表裡的字段這個不需要理會,他們之間的聯絡是id)

不知道大家看完之後會使用什麼樣的方法校驗,我記得那天下午把資料表弄了明白之後,用迴圈的方式進行校驗的,因為這樣的樹形資料表之前聽也沒聽說過,這次是第一次接觸。。。

第二天上班問了老員工,問她會使用什麼樣的方法進行校驗,她說了一句「用樹查詢啊!」我一愣?後面的就沒有聽下去,樹查詢是什麼東東啊!急忙跑去問度娘,溫柔的度娘「啪」的一聲羅列出幾百萬條記錄,我簡單的看了一下,尋找我能用到的答案!

樹查詢語法:

[sql] 

view plain

copy

select

... 

from

tablename start 

with

條件1  

connect

by條件2  

where

條件3;  

條件1 是根結點的限定語句,就是以什麼欄位為節點(一般以id)當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。

條件2 是連線條件,其中用prior表示上一條記錄,這一點容易混淆

條件3 是過濾條件,用於對返回的所有記錄進行過濾

這一句就解決了我的問題!

首先我先在另一張表裡將有效積分資料的id找出來,通過id將資料從樹形表裡取出來放在乙個list裡,然後遍歷list,使用查詢所有父節點sql語句:

[sql] 

view plain

copy

select

* from

tablename t 

where

t.id != :itemid start 

with

t.id = :itemid 

connect

byprior

parentid = t.id;  

裡面有個條件是

[sql] 

view plain

copy

t.id != :itemid  

是為了將本身節點

剔除,防止查出來的資料報含自身節點

查出來的資料放在parentlist,然後再遍歷,通過id查詢另一張表裡對應的資料下是否為有效積分,沒有的話繼續遍歷下乙個否則丟擲異常,提示校驗失敗!

然後使用查詢所有子節點sql語句:

[sql] 

view plain

copy

"font-family:microsoft yahei;font-size:14px;"

>

select

* from

tablename t 

where

t.id != :itemid start 

with

t.id = :itemid 

connect

byprior

"line-height: 16.8999996185303px;"

>id = t."line-height: 16.8999996185303px;"

>parentid;

同樣使用遍歷的方法進行校驗

就如上圖,以10為節點,先將所有的父級查出來進行校驗,再將所有的子級查出來進行校驗

樹查詢的好處就是一次性的將所有的父節點或子節點查出來。

就這樣乙個sql語句解決了很多的問題,中途也不會出錯,做開發最後還是對資料庫的操作,就看你能不能hold住!!!

mysql資料庫查詢作業 mysql資料庫查詢練習

建立四張資料表 學生表student 學號,姓名,性別,出生年月日,所在班級 課程表course 課程號,課程名,教師編號 成績表score 學號,課程號,成績 教師表teacher 教師編號,教師名,教師性別,出生年月日,職稱,所在部門 新增資訊 學生表 insert into student v...

mysql資料庫查詢

1 兩列時間相減結果顯示 select timestampdiff minute,t1,t2 as 時間差值 from 表名 2 判斷如果某字段為空 標識0 某欄位非空 標識1 case when 欄位名 is not null then 1 else 0 end 例如 當ttot與atot時間差值...

雲資料庫mysql 慢查詢 MySql資料庫慢查詢

一 什麼是資料庫慢查詢?資料庫慢查詢,就是查詢時間超過了我們設定的時間的語句。預設的設定時間是10秒。也可以自己根據實際專案設定。set long query time 0.0001 slow query log 是否開啟慢查詢日誌,1表示開啟,0表示關閉。log slow queries 舊版 5...