0
我有一個菜單系統的SQL表。它具有「id」作爲索引,「顯示」字段和「父」字段。這些是數據:有沒有辦法從SQL查詢返回綁定結果?
id, display, parent
1, File, 0
2, View, 0
3, Window, 0
4, Open, 1
5, Save, 1
6, Export, 1
7, Export to Image, 6
8, Export to PDF, 6
9, JPEG, 7
10, PNG, 7
我想有一個函數返回HTML選擇格式的菜單層次結構。所需的輸出應該是這樣的:
<option value='1'>File</option>
<option value='4'>-- Open</option>
<option value='5'>-- Save</option>
<option value='6'>-- Export</option>
<option value='7'>---- Export to Image</option>
<option value='9'>------ JPEG</option>
<option value='10'>------ PNG</option>
<option value='8'>---- Export to PDF</option>
<option value='2'>View</option>
<option value='3'>Window</option>
這是我想出了以下功能:
function SelectPage($pdo, $default = "", $depth = 0, $id = 0, $opts = "") {
$sql = $pdo->prepare("SELECT id,display FROM pages WHERE parent = ?");
$sql->execute(array($id));
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
$opts .= "<option value='{$row["id"]}'>";
$opts .= trim(str_repeat("--", $depth) . " ");
$opts .= "{$row["display"]}</option>";
$tmp = SelectPage($pdo, $default, ($depth + 1), $row["id"], $opts);
$opts = $tmp;
}
return $opts;
}
它的工作原理,但我懷疑這是多麼有效。我想知道是否有一種方法可以使SQL查詢以正確的順序返回它們,以便我可以避免對自己進行循環調用?