您不应该像@Jerska 所说的那样使用 sort_id ,因为那样您将无法对子菜单进行排序并且它会使您的程序逻辑复杂化/混淆。你可以有一张这样的桌子
CREATE TABLE menu(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
parent_id INT,
FOREIGN KEY(parent_id) REFERENCES menu(id),
sort_id INT,
title VARCHAR(100)
) ENGINE=InnoDB;
如果 parent_id 设置为 null 那么它是一个根菜单。
这是给您的示例菜单:
家居和花园
- 客厅
- 餐厅
- 浴室
- 卧室
- 花园和温室
电器
- 声音和视觉
- 计算机和电话
- 家用电器
- 小家电
它将像这样存储:
INSERT INTO menu
(parent_id, sort_id, title)
VALUES
(null, 1, "Home & Garden"),
(null, 2, "Electricals"),
(1, 1, "Living Room"),
(1, 2, "Dining Room"),
(1, 3, "Bathroom"),
(1, 4, "Bedroom"),
(1, 5, "Garden & Conservatory"),
(2, 1, "Sound & Vision"),
(2, 4, "Small Appliances"),
(2, 3, "Home Appliances"),
(2, 2, "Computing & Phones");
如果你真的按这个顺序插入它们,“Home & Garden”的 ID 将为 1,“Electricals”的 ID 为 2(不要与 sort_id 混淆),“Living Room”的 ID 为3,“Dining Room”的 ID 将是 4... 因为我们在 ID 字段上自动递增。
因此,如果您想在 Sound & Vision 中有一个子类别,首先您会找到 ID,在这种情况下它会找到8
,然后您将添加新记录,其父 ID 为8
.
示例子子类别:
Electricals
- Sound & Vision
* Televisions
* Audio
您将插入这些记录:
INSERT INTO menu
(parent_id, sort_id, title)
VALUES
(8, 1, "Televisions"),
(8, 2, "Audio");