2012-08-07 3 views
3

PHP와 MySQL에서 동적 메뉴 (하위 메뉴 포함)를 만들려고합니다. 그리고이 메뉴를 사용하여 조작하는 동적 편집기를 만들려고합니다. 위치를 지정하여 메뉴 범주를 만들 때 누적되었습니다. 잘 이해하려면 MySQL의 테이블 구조를 살펴 =>동적 메뉴 수정 PHP mysql

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 테이블을 관리하는 방법 (앞으로 또는 뒤로)? 고마워요 :)

+0

하고, 0/-1을 넣어 : 당신은이 레코드를 삽입 할

Electricals - Sound & Vision * Televisions * Audio 

뿌리 메뉴. (귀하의 SQL 관리자가 ID를 시작하는 방법에 따라 – Jerska

+0

및 부모 메뉴가없는 주 메뉴 범주는 무엇입니까? – tnanoba

+0

이미 편집 – Jerska

답변

3

@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는

을 생활 - 사운드 & Vi 시온
- & 전화
컴퓨팅 - 가전
- 소형 가전

그것은 다음과 같이 저장됩니다 :

당신이 실제로 그 순서로 삽입 한 경우
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"); 

, 홈 & "의 ID Garden "은 1이고"Electricals "의 ID는 2 ("sort_id "와 혼동하지 말 것)이고"Living Room "의 ID는 3,"Dining Room "의 ID는 4가됩니다. 우리가 ID 필드에서 자동으로 증가하기 때문입니다. 당신은 하위 범주를 갖고 싶어

그래서 먼저, ID를 찾을 것입니다,이 경우는 8을 것 한 다음 8로 부모 ID로 새 레코드를 추가, 사운드 & 비전에 말한다.

예 하위 하위 범주 : 단지 부모 메뉴의 ID를 넣어 sort_id에서

INSERT INTO menu 
    (parent_id, sort_id, title) 
VALUES 
    (8, 1, "Televisions"), 
    (8, 2, "Audio"); 
+0

이 일종의 테이블 구조로 여러 개의 하위 메뉴를 가질 수 있습니까? 나는이 테이블에서만 의미합니까? – tnanoba

+0

@Tornike parent_id가 parent_id가 NULL 인 메뉴를 가리키는 다른 메뉴를 가리키는 parent_id가 메뉴에 있으면 어떻게 될까요? – Ozzy

+0

사실, 내 마음 속에서 sort_id는 부모 ID로 사용되었습니다. 그리고 모든 것이 잘됩니다. 그는 또한 그것을 분류 할 수 있습니다. – Jerska

3

sort_id에서 그냥 부모 메뉴의 ID를 넣어 루트 메뉴에 대한 그냥 0/NULL 넣어.

예 : (SID = sort_id)

id|sid| title 
1 | 0 | Menu1 
2 | 0 | Menu2 
3 | 1 | Submenu1of1 
4 | 1 | Submenu2of1 
5 | 2 | Submenu1of2 
6 | 4 | Subsubmenu1of2of1 

가 참조됩니다

1 : Menu1 
    3 : Submenu1of1 
    4 : Submenu2of1 
     6 : Submenu1of2of1 
2 : Menu2 
    5 : Submenu1of2 

지금 1 단계와 2 단계 사이의 변환을이 작업의 당신의 일부입니다.
재귀를 사용하면 괜찮을 것입니다. :)