我正在尝试在PHP和MySql中构建动态菜单(带子菜单).并尝试使用此菜单构建动态编辑器进行操作,创建,删除等.在创建菜单类别时,我已经堆叠了它的位置.要好好理解一下MysqL table structure =>
create table menu(
id int(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
sort_id UNSIGNED BIGINT NOT NULL,
title VARCHAR(20) NOT NULL,
etc ...);
我正在使用sort_id对菜单类别进行排序,并且在创建过程中我给了这个列不同的值(默认情况下是第一次),因为在创建了另一个类别后,我将值加1并减去1,但我认为它这样做很糟糕.任何想法如何管理MysqL表来定义创建的类别(前进或后退)的位置?谢谢 :)
解决方法:
您不应该像@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,则它是根菜单.
家庭&花园
– 客厅
– 饭厅
– 浴室
– 卧室
– 花园&温室
ELECTRICALS
– 声音&视力
– 计算机和手机
– 家用电器
– 小家电
它会像这样存储:
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,“餐厅”的ID将是4 …因为我们在ID字段上自动递增.
所以,如果你想在Sound&中找到一个子类别.愿景,首先你会找到ID,在这种情况下,它将是8,然后你将添加父记录为8的新记录.
示例子子类别:
Electricals
- Sound & Vision
* Televisions
* Audio
你会插入这些记录:
INSERT INTO menu
(parent_id, sort_id, title)
VALUES
(8, 1, "Televisions"),
(8, 2, "Audio");