-
- CREATE TABLE `type` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `fid` int(11) NOT NULL DEFAULT '0',
- `name` varchar(50) NOT NULL,
- 主キー (`id`)
- )
コードをコピー
2. 追加
いくつかのトップレベルのカテゴリを追加する
-
- INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', 'mobilephone');
- INSERT INTO `type` (`id`, ` fid `, `name`) VALUES (NULL, '0', 'computer');
- INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', 'shoes' ) ;
- INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '0', 'Clothes');
コードをコピー
ここで、fid=0 は最上位のカテゴリを表します
次に、{Computer} にいくつかのサブカテゴリを追加します
-
- INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '2', 'Desktop'), (NULL, '2', 'Notebook');
-
コードをコピー
ここで fid=2、id 2 はカテゴリ {Computer} の ID です。{Shoes} のサブカテゴリを追加すると、fid=3 になります。
同様に、{notebook} にサブカテゴリを追加すると、fid=6 となります。
-
- INSERT INTO `type` (`id`, `fid`, `name`) VALUES (NULL, '6', 'ausu'), (NULL, '6', 'hp');
コードをコピー
3. 削除します。
カテゴリ {Notebook} を削除したい場合は、次の手順を実行できます。
-
- DELETE FROM `type` WHERE `id`=6
コードをコピー
{Notebook} サブカテゴリも同様に処理する必要があります。
-
-
function del($fid) {
- $sql="SELECT * FROM `type` WHERE `fid`=$fid";
- $rs=mysql_query($sql);
-
- for ($i = 0; $i $sql="DELETE FROM `type` WHERE `id`={$rs[$i]['id']}" ;
- mysql_query($sql);
-
- del($rs['id']);//再帰
- }
- }
del(6);//操作を実行 p> ;
コードをコピー
なぜこのように直接削除せずに再帰を使用するのがそれほど面倒なのでしょうか?
-
- DELETE FROM `type` WHERE `fid`=6
コードをコピー
それでは、{ausu}、{hp}を直接削除できますか?
ただし、{ausu} にサブカテゴリ {a1} があり、{a1} にもサブカテゴリ {a2} があると仮定すると、再帰なしにデータを完全に削除することはできません。
3. 検索
1. {コンピューター} のサブカテゴリを検索します。
-
- SELECT * FROM `type` WHERE `fid`=2
コードをコピー
2 {Computer} のすべてのサブカテゴリを検索します。
-
-
function sel($fid) {
- $sql="SELECT * FROM `type` WHERE `fid`=$fid";
- $rs=mysql_query($sql);
-
- for ($i = 0; $i echo $rs[$i]['name'];
-
- sel($rs[$i]['id'] );//再帰
- }
- }
sel(2);
コードをコピー
IV.
フィールド `tid` をデータ テーブルに追加します。フィールド値は、レコードが属する `type` テーブルの ID です。 name の値は変更される可能性があるため、name ではなく id である必要があります。
たとえば、{Computer} カテゴリに属する製品をクエリします。
-
- SELECT * FROM `goods` WHERE `tid`=2
コードをコピー
以上、皆さんのお役に立てれば幸いです。
|