⑴ 循環中查詢資料庫會不會效率低下
在循環裡面去操作資料庫肯定會慢的,而且還容易碰到新手,在循環裡面創建資料庫連接,會導致連接數滿。一般查詢的話,在外層一次性查詢出來 然後 在邏輯層去循環組織數據。如果是新增,則可以考慮使用批量插入的方法去處理。
⑵ 資料庫語句的遞歸查詢求助
應該是這樣:
with qry as (select user_id,parent_id from tab where user_id = 32
union all
select tab.user_id,tab.parent_id from tab,qry
where tab.parent_id = qry.id)
select * from qry ;
我用mysql5.0.22,不支持上述語法,oracle就可以(sqlserver應該也可以):
create table tab1(user_id int, parent_id int);
insert into tab1 values(1,null);
insert into tab1 values(32,1);
insert into tab1 values(101,32);
insert into tab1 values(102,32);
insert into tab1 values(201,101);
insert into tab1 values(202,101);
insert into tab1 values(203,102);
insert into tab1 values(204,102);
select * from tab1;
with qry(user_id,parent_id) as (select user_id,parent_id from tab1 where user_id = 32
union all
select tab1.user_id,tab1.parent_id from tab1,qry
where tab1.parent_id = qry.user_id
)
select * from qry;
所以,mysql沒有辦法了,只有寫函數,用循環來實現了。
⑶ 如何實現SQL語句的遞歸查詢
1.創建測試表,createtabletest_connect(idnumber,p_idnumber);
⑷ java 遞歸查詢資料庫
這個就是個樹形結構,數據結構里的東西。查詢後構建一個樹就行了。稍後給你一個代碼。
⑸ sql 怎麼遞歸查詢的方法:
1.創建測試表,createtabletest_connect(idnumber,p_idnumber);
⑹ [PHP][THNIKPHP]如何遞歸查詢資料庫
function get_category($id){
$str=array();
//$sql = "select * from biao where id=$id";查詢節點,自己寫吧
$result = array('id'=>,'parent_id'=>);//查詢結果一個數組格式
if($result){
$str = get_category($result['parent_id']);
$str[]=$result;
}
return $str;
}
}
調用get_category()就行了,$str第一個元素是節點本身,去掉就行了。
⑺ sql 怎麼遞歸查詢的方法:
1.創建測試表,createtabletest_connect(idnumber,p_idnumber);
⑻ 如何實現資料庫SQL遞歸查詢在不同資料庫中例子源代碼
sql 遞歸查詢的方法:
方法一:T-SQL遞歸查詢
with Dep as
(
select Id,DeptCode,DeptName from Department where Id=1
union all
select d.Id,d.DeptCode,d.DeptName from Dep
inner join Department d on dep.Id = d.ParentDeptId
)
select * from Dep
方法二:PL/SQL遞歸查詢
select Id,DeptCode,DeptName
from Department
start with Id = 1
connect by prior Id = ParentDeptId;
⑼ mysql 如何循環查詢
用遞歸吧,不過我不會用MySQL的語法,應該跟SQLserver差不多吧
2.執行語句與結果
⑽ sql語句實現遞歸查詢所有節點,mysql和oracle都能用的
首先說一下Oracle的遞歸查詢,相信大部分人都知道很簡單。無非start with connect by 函數。下面是從pId向子節點遞歸查詢的例子,unId是資料庫表中的主鍵。
如果是從子節點遞歸到父節點查詢,就把start with 換成unid,prior左右對換
下面再講MySql 的遞歸查詢方式。MySql沒有Oracle的強大功能,雖然都是同一個公司的產品。所以只能靠自己寫。有很多方法,用sql去循環查詢,或者寫存儲過程,我這里只提供一種。就是新建一個function函數。
表結構不說了,無非就是 Id ,pId,其他列。下面是創建一個遞歸查詢子節點的函數
DROP FUNCTION IF EXISTS queryChildrenPowerInfo;
CREATE FUNCTION `queryChildrenPowerInfo` (powerId VARCHAR(2000))
RETURNS VARCHAR(2000)
BEGIN
DECLARE sTemp VARCHAR(2000);
DECLARE sTempChd VARCHAR(2000);
SET sTemp = '$';
SET sTempChd = cast(powerId as CHAR);
WHILE sTempChd is not NULL DO
SET sTemp = CONCAT(sTemp, ',', sTempChd);
SELECT group_concat(id) INTO sTempChd FROM t_discretionary_power where FIND_IN_SET(pId,sTempChd)>0;
END WHILE;
return sTemp;
調用的時候:select queryChildrenPowerInfo(""); 該語句會返回Id和父Id等於傳入參數powerId的一個字元串,中間有逗號隔開如圖
下面這句代碼的意思是,查詢出 t_discretionary_power 表中,t.id 等於上面查詢出的結果集的數據。FIND_IN_SET(A,B)是MYSQL的函數。意思是查找在B集合中有A的數據。相當於In
select t.* from t_discretionary_power t where FIND_IN_SET(t.id,queryChildrenPowerInfo(''))