ホームページ  >  記事  >  データベース  >  mysql での無限分類のコード実装

mysql での無限分類のコード実装

不言
不言オリジナル
2018-08-20 16:34:002757ブラウズ

この記事の内容は、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。