Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 6 years ago

left join 的疑問... 太難了拉,頭好痛喔~~

建了3個資料表

1.member

欄位

MemberID

Name(EX.靜香,大雄....)

2.service

欄位

ServiceID

ServiceType(EX.Web,Email)

Name(EX.網站服務,電子郵件服務)

3.rt_member_service

欄位

rt_member_serviceID

MemberID

ServiceID

我想顯示出(舉例):

靜香 - Web - 網路服務

靜香 - Email - 電子郵件服務

大雄 - Email - 電子郵件服務

類似這樣的..

下面是我打的

$sql="select * from rt_member_service left join member on rt_member_service.memberID = member.memberID";

$Rs=mysql_query($sql);

while ($Row = mysql_fetch_array($Rs))

{

$sql="select * from rt_member_service left join service on rt_member_service.serviceID = service.serviceID";

$R=mysql_query($sql);

while ($Roow = mysql_fetch_array($R))

echo $Row[Name] . " - " . $Roow[ServiceType] . " - " . $Roow[Name] ."</br>";

}

只是結果變成這樣(舉例)

靜香 - Web - 網路服務

靜香 - Email - 電子郵件服務

靜香 - Web - 網路服務

靜香 - Email - 電子郵件服務

靜香 - Web - 網路服務

靜香 - Email - 電子郵件服務

大雄 - Email - 電子郵件服務

大雄 - Email - 電子郵件服務

重複了很多很多次,我不知道為什麼,是不能用雙重迴圈嗎

求解...

SQL新手向各位大大發問

我實在不知道哪裡出錯了= =

Update:

看懂了! 謝謝你!

1 Answer

Rating
  • 6 years ago
    Favorite Answer

    換成我的話是用

    1.member

    欄位

    MemberID

    Name(EX.靜香,大雄....)

    2.service

    欄位

    ServiceID

    MemberID <= 增加這個欄位 存 member 中的 MemberID

    ServiceType(EX.Web,Email)

    Name(EX.網站服務,電子郵件服務)

    3.rt_member_service

    欄位

    rt_member_serviceID

    MemberID <= 這個一樣是存 member 下面的 MemberID

    ServiceID

    這樣抓資料庫就簡單了

    $sql_select ="select * from member";

    $sql_query=mysql_query($sql_select);

    while($sql_row=mysql_fetch_assoc($sql_query)){

    $sql_select_ser="select * from ServiceID where MemberID = '".$sql_row["MemberID"]."'";

    $sql_query_ser=mysql_query($sql_select_ser);

    $sql_row_ser=mysql_fetch_assoc($sql_query);

    echo "name:".$sql_row["name"].";web:".$sql_row_ser["ServiceType"].";webser:".$sql_row_ser["name"]."";

    }

    2014-01-13 21:35:44 補充:

    我看到你的 rt_member_service 這個 table 了

    也是可以直接從 這邊找就行了

    跟 上述的方法 差不多 只是需要對照 rt_member_service 這個第三張表而已 得多打些程式碼

Still have questions? Get your answers by asking now.