2014-03-27 87 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      

這是我使用

$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; 

如果您需要了解更多信息或者如果不清楚,請讓我知道

+0

是否在沒有PHP東西的情況下進行連接? – 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' 

除了缺少AND代碼在@ 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