2014-03-27 2 views
0

맨 위에 내용이있는 페이지를 만들려고합니다. 제목을 클릭하면 아래쪽으로 이동하여 더 많은 내용을 표시하는 섹션이 있습니다. 하단 부분에 약간의 문제가 있습니다. 조인을하려고 할 때 아무 것도 나타나지 않습니다.mysql을 사용하여 조인을 수행하는 방법

3 개의 테이블이 있습니다. 콘텐츠 테이블의 경우 id는 기본 키입니다. 메뉴 테이블의 경우 id는 기본 키입니다. content_menu의 경우 id_menu와 id_content가 모두 기본 키입니다.

content: 
      id | title | content 
      1 | content1 | This is content 1 
      2 | content2 | This is content 2 

menu: 
      id | title |active 
      1 | menu 1 | 1 
      2 | menu 2 | 1 

content_menu: 
       id_menu | id_content 
        1 | 1      

당신이 어떤 자세한 정보가 필요하거나 불분명 주시기 바랍니다 경우 나를 AND 누락 또한

+0

PHP stuff arround없이 조인 할 수 있습니까? – frlan

+1

암시 적 (쉼표) 및 명시 적 JOIN 구문을 함께 사용하지 마십시오. 사실, 쉼표 조인 구문을 사용하지 마십시오. – Strawberry

답변

1
SELECT * FROM menu M, content C LEFT JOIN content_menu CxM ON M.`id`=CxM.`id_menu` 
C.`id`=CxM.`id_content` WHERE M.`active`='1' 

을 알고 있다면 내가

$exQuery = "SELECT * FROM menu M, content C LEFT JOIN content_menu CxM ON M.`id`=CxM.`id_menu` C.`id`=CxM.`id_content` WHERE M.`active`='1'"; 
$query = mysql_query($exQuery); 
while($result = mysql_fetch_object($query)){ 

    $str.='<div class="additional-navigation-wrapper">'; 
    $str.=  '<div class="additional-navigation">'; 
    $str.=   '<a class="border-bottom-white padding-level-one inactive additional-nav-info" href="javascript:void(0);">'; 
    $str.=    $result->title; 
    $str.=    '<img class="nav-arrow no-action floatright" src="images/nav-arrow-white.png" />'; 
    $str.=    '<span class="clearboth"></span>'; 
    $str.=   '</a>'; 
    $str.=   '<div class="additional-nav-info-wrapper">'; 
    $str.=    '<div class="additional-nav-info-inner" style="display:none;">'; 
    $str.=     '<h2>'.$result->title.'</h2>'; 
    $str.=     '<p>'.$page->content.'</p>'; 
    $str.=    '</div>'; 
    $str.=   '</div>'; 
    $str.=  '</div>'; 
    $str.='</div>'; 
    $i++; 
} 

return $str; 

을 사용하고 코드입니다 @ user3591614에서 언급 한 두 조인 용어 사이에 콤마 스타일 조인 구문과 JOIN 구문을 섞으면 문제가 발생합니다.

JOIN은 쉼표보다 우선 순위가 높습니다. 따라서 검색어가 M.id = CxM.id_menu이라는 용어를 평가할 때 테이블 CCxM에 대해서만 알고 있습니다. 따라서 테이블 M은 조인 조건으로 참조 할 수 없습니다.

해결 방법은 쉼표 스타일의 조인을 사용하지 않고 일관된 조인을 위해 현대 구문을 사용하는 것입니다. 그 쿼리를 작성하는 방법은 다음과 같습니다.

SELECT * FROM menu M 
LEFT JOIN content CxM ON M.id = CxM.id_menu 
LEFT JOIN content C ON C.id = CxM.id_content 
WHERE M.active=1 
관련 문제