確かに、無限のレベルの分類をループすることは頭痛です。
たとえば、選択またはテーブルをループして、多くの判断を書く必要があります。
より良い方法はありますか?
私のアプローチは、配列を生成することです。繰り返し呼び出して、アレイを直接ループすることができます。
便利なため、私はそれをクラスに書きました。
class.asp
すべてのカテゴリとソートの配列を順番に返します
4つの属性があります。
次のようにコードをコピーします:setaa = newClassList
aa.id = "id" //番号名
aa.classname = "className" //分類名
aa.pid = "pid" //親ID名
aa.db_name = "class" //テーブル名
list = aa.arrylist()
次のようにコードをコピーします:<%
ClassClassList
privatec_id
privatec_db_name
privatec_pid
privatec_classname
publicPropertyletid(str)
c_id = str
Endproperty
publicPropertyletdb_name(str)
c_db_name = str
Endproperty
publicPropertyletPid(str)
c_pid = str
Endproperty
publicPropertyletclassName(str)
c_classname = str
Endproperty
dimlist()
ディミ、n
privatesubclass_initialize() '初期化変数
i = 0
n = 0
Endingub
publicFunctionClassArry(thisid、pid) ''低いIDを取得します
ifpid> 0then
sql = "select*from"&c_db_name& "where"&c_pid& "="&thisid
それ以外
sql = "select*from"&c_db_name& "where"&c_id& "="&thisid
endif
setrs_c = conn.execute(sql)
n = n+1
dowhileenotrs_c.eof
list(0、i)= rs_c(c_id) '配列にロードします
list(1、i)= rs_c(c_classname)
リスト(2、i)= n
'n = n+1
i = i+1
thisid = classarry(rs_c(c_id)、1) 'ここに最後のサブクラスまで再帰的な呼び出しがあります
rs_c.movenext
ループ
n = n-1
rs_c.close
エンド機能
publicFunctionArryList() 'すべてのルートクラスをループします
setrs_c = conn.execute( "selectcount("&c_id& ")from"&c_db_name)
長さ= rs_c(0)
rs_c.close
redimlist(2、lenght) '配列を設定します
setrs1 = conn.execute( "select"&c_id& "from"&c_db_name& "where"&c_pid& "= 0")
dowhileenotrs1.eof
callclassarry(rs1(c_id)、0)
'n = 1
rs1.movenext
ループ
rs1.close
arryllist = list
エンド機能
エンドクラス
%>
テストの例:
テーブルクラス
フィールド
ID:自動番号付け
クラス名:名前
PID:親ID