我有一個數據庫結構類似如下:從PHP如何在SQL Server中有效執行此搜索?
Table A: PersonId, GroupId
Table B: GroupId, ParentGroupId
給定一個PersonId
,我想找到的所有的人的ID在該人的小組的父組。
首先我選擇ParentGroupId
給定的PersonId
,加入B
。然後我做一段時間的循環,根據GroupId
從A
中選擇並記錄PersonId
,然後繼續循環,從B
獲取下一個ParentGroupId
。
這是一個有效的方法來做這個搜索,或者是否有一個選項,不涉及一段時間以這種方式「冒泡」?
(這是實際情況的一個簡化版本,更改架構不是一個選項)
$sql = 'SELECT ParentGroupID FROM A WHERE PersonId = ' . $id;
$result = $db->query($sql);
$row = $db->fetch_array($result);
$parent_group = $row['ParentGroupId'];
if(!is_null($parent_group)) {
$parent_ids = array();
while($parent_group > 0) {
//is there a way to do this where I retrieve all managers <= lvl 6 at once, so I don't have to loop in order to 'tier up'?
$sql = 'SELECT ParentGroupID, PersonID
FROM B
INNER JOIN A on ParentGroupID = A.GroupID
WHERE ParentGroupID = ' . $parent_group;
$result = $db->query($sql);
$row = $db->fetch_array($result);
$parent_group = $row['ParentGroupID'];
$parent_ids[] = $row['PersonID'];
}
}
添加您的SQL請 – cmorrissey
是什麼讓yoo認爲查詢效率低下? – Mihai
@Mhaihai對循環的每個循環做的另一個查詢是低效的定義。 –