ASP.Net/MySQL多级菜单
问题描述:
我试图通过从MySQL表中检索数据来生成菜单Web控件。我已经将所有数据存储在一个DataTable中,但到目前为止,我可以做到一个级别。我确定在这里肯定有一个递归函数,但我不知道如何添加到更深层次。ASP.Net/MySQL多级菜单
这是我到目前为止已经完成:
public Menus(Menu menu, int menuId)
{
Database db = new Database("localhost", "dotnetcms", "root");
DataTable data;
query = "SELECT * FROM links WHERE menu_id = " + menuId + " ORDER BY `order`, parent ASC";
queryRows = "SELECT COUNT(*) FROM links WHERE menu_id = " + menuId + " ORDER BY `order`, parent ASC";
data = db.AQuery(query);
foreach (DataRow row in data.Rows)
{
if (row[3] == DBNull.Value)
{
menu.Items.Add(new MenuItem(row[1].ToString()));
}
else
{
AddChildMenus(row, menu.Items[Convert.ToInt32(row[3]) - 1]);
}
}
}
private void AddChildMenus(DataRow dr, MenuItem parent)
{
parent.ChildItems.Add(new MenuItem(dr[1].ToString()));
}
答
MySQL不支持递归选择。如果数量级别非常有限,则可以在单个查询中完成,并在父/子ID上反复加入表格。
但是,嵌套集模型可能是您最好的解决方案。