この記事の内容は、mysql での Infinitus 分類のコード実装に関するものです。必要な方は参考にしていただければ幸いです。
他のところからも見つけて分析してみたところ、なかなか良いものがあったのでここでシェアしたいと思います。
写真を投稿することはできず、簡単に処理することしかできません:ニュース 0-1
3 2 0-1- 3 AS newpath FROM cats ORDER BY newpath
クエリ最終結果:
id中国ニュース 1 1 0 -1 0-1-2
4 4 北京ニュース 2 0-1-2 0-1-2 -4
3ネイルブラザーニュース3 mysql のソート関数を非常に巧みに使用し、concat() 関数を使用して現在のパスを現在の ID に接続しました (実際には文字列を接続したいのですが)。 newpath をソートするときに、偶然にも比較しました。並べ替えるときは最初に 0、比較 1、比較 2、比較 3... このようにして、クエリ結果はレベル別に直接並べ替えられます。次に、フォアグラウンドで出力をループするだけで、「階層関係プレースホルダー」を使用できます。 newpath の 0-1-2-4 は Infinitus プレースホルダーに相当します。PHP を出力する場合、各データの newpath フィールド値をクエリする必要があります。値はまず配列に分割され、次に統計に分割されます。この配列の場合、キー カウント (データのセット) を配列に追加し、カウントされた配列の数をこのキーに入れます。
thinkphp 5.0 の例:
$list = CateModel::fild(‘id,name,pid,path,concat(path,’-‘,id)’)->order(‘newpath asc’)->select(); // 上面模型查询方法只是大概意思,可以根据最上面的 mysql 语句,用 tp5 的方式拼出来。 foreach ($list as $k=>v){ $list[$k][‘count’] = count(explode(‘-‘,$v)) }
このカウントは階層分類のプレースホルダーであり、それをテンプレートでループし、数回エコーします
<select name=”aa”> {volist name=”list” id=”vo”} <option vlaue=”{$vo.id}”> {php} for($i=0;$i<$vo[‘count’]*2;$i++){ echo ‘ ’ } {/php} {$vo.name} </option> {/volist} </select>
効果:
ニュース
中国ニュース
再帰を使用して無限グレーディングを実装します (コード例)
。
以上がmysql での無限分類のコード実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。