2014-03-05 6 views
0

여러 게시물을 검색했지만 문제를 해결할 수있는 항목을 찾을 수 없습니다.상위 ID없이 중첩 된 다중 레벨 메뉴를 만드는 방법

내 데이터베이스에는 "1.1.2"와 같은 이름과 "treepath"데이터가 있습니다. 나는 부모님 아이디 나 그와 같은 것이 없다. 그래서 내 질문은 : "treepath"만있는 중첩 된 다중 레벨 메뉴를 만드는 방법이 있습니까? 내 테이블에서

내가 가진 (ID | NAME |의 TreePath) :

  • 0 | 전화 | 1
  • 1 | 삼성 | 1.1
  • 2 | 갤럭시 S | 1.1.1
  • 3 | 갤럭시 노트 |

    <ul> 
        <li><a href="">1. Phones</a> 
        <ul> 
         <li><a href="">1.1. Samsung</a> 
         <ul> 
         <li><a href="">1.1.1. Galaxy S</a></li> 
         <li><a href="">1.1.2. Galaxy Note</a></li> 
         <li><a href="">1.1.3. Galaxy Ace</a></li> 
         </ul></li> 
         <li><a href="">1.2. Apple</a></li> 
         <li><a href="">1.3. Google</a></li> 
        </ul></li> 
    </ul> 
    

    내가 확실히 PHP로 재귀 함수를 필요로하지만, 누군가가 도움을 줄 수 그래서 만약 내가, 바로 그것을 가지고 할 수 없습니다 1.1.2

은 ...

출력은 내가 필요 나, 이거 위대한거야!

감사합니다.

+3

지금까지 (코드) 무엇을 시도 했습니까? – djot

+0

"Phones"와 "Models"사이에 DB에 관계가 있습니까? 예를 들어 "상위"는 "전화"입니다. 그러면 전화기와 브랜드 간 관계가 있습니다. "Samsung" 이것은 완전히 이상하지 않은 쿼리입니다 (작동하지 않습니다). 그러나 다음과 같이 쿼리를 작성할 수 있습니다 :'SELECT * FROM MODELS JOIN 모델 ON MODEL.ID == WHERE PHONE.ID === 1' 그런 식으로 쿼리를 작성하면 동일한 부모 개체를 처리한다는 확신을 가지고 결과를 반복 할 수 있습니다. – Damon

답변

0

글쎄, 정규 표현식을 사용하는 재귀 함수를 사용할 수 있지만, 이는 차선책 일 수 있습니다. 의사 코드는 다음과 같습니다 : 응용 프로그램이 중첩 된 메뉴를 제공 할 필요가

function drawTree($root) { 
    while($results = yourQuery("SELECT * FROM table WHERE treepath REGEXP '^{$root}\.'")) { 
    echo "stuff"; 
    drawTree($results['treepath']); 
    } 
} 
-1

경우 중첩 구현하는 것이 더 낫다 당신의 데이터베이스 (데이터베이스 언어, 그것은, 외래 키 제약 조건을 그룹화 할 것이다). 프리젠 테이션 계층과 데이터베이스 계층에서 다른 디자인을 유지하는 것이 좋습니다. 결국, 강력한 데이터베이스 디자인은 모든 애플리케이션에서 중추적 인 역할을합니다. 그렇지 않습니까?

응용 프로그램 디자인을 간소화하고 데이터를 체계적이고 일관성있게 유지하며 데이터베이스 콘텐츠를 프레젠테이션 콘텐츠로 변환하는 데 드는 노력이 줄어들며 새로운 기능을 추가하는 것이 더 쉬워집니다. 어떤 분류와 훌륭한 스키마 디자인으로 시작하는 것이 어떻습니까?

당신이 저를 요구하는 경우에, 나는 PHONE_NAME, 해, 제조업체, 모델을 가진 "phones"테이블 같은 것을 만들 것, 다른 테이블 manufacturer id's, names, yearsmanufacturers 및 기타 정보를 호출이있을 것, 다시 등 을 입력 . "type"에 대한 다른 표를 가질 수도 있습니다. 전화 테이블에 manufacturer id's and manufacturer 열 사이에 foreign key relationships 열이 있고 다른 열/테이블에도 비슷한 항목이 있습니다. 혼란 스러우면 시작하기 좋은 곳은 E-R 다이어그램을 그리는 것이고 결국에는 테이블과 뷰에 놓이게됩니다.

+0

폴더 (5000+)에 엄청난 양의 이미지 목록을 작성하는 함수를 사용하고 내 웹 페이지의 폴더를 다시 만들고 싶기 때문에 데이터베이스가 이와 같습니다. 나는 정보를 가지고 있지 않다, 바로 사진을 "올바른 폴더에"열거 할 것이다. – LinaeAzn

0

상황이 이상합니다.

테이블에 상위 ID가없는 기술적 이유는 없습니다. 또는 첫 번째 정규 양식을 사용합니다. 약간의 고민이 있지만 다음과 같이 할 수 있습니다.

<?php 
$db = new mysqli(...); 
$stmnt = $db->prepare("select name, treepath, LENGTH(treepath) - LENGTH(REPLACE(treepath, '.', '')) AS depth from tree order by treepath"); 
$stmnt->bind_result($name,$treepath,depth); 
$tree = array(); 
$current_depth = 0; 
while($stmnt->fetch()) 
{ 
    if($current_depth < $depth) 
    { 
    echo '<ol><li>' . $name . '</li>'; 
    $current_depth=$depth; 
    } 
    else if($current_depth == $depth) 
    { 
    echo '<li>' . $name . '</li>'; 
    } 
    else //current_depth greater than depth 
    { 
    echo '</ol><li>' . $name .'</li>'; 
    } 
} 
$stmnt->close(); 
$db->close(); 
echo '</ol>'; 
?> 

테스트하지 않으면 트위크가 필요합니다.

관련 문제