如何使用复合主键从特定字段获取数据?

时间:2015-06-03 09:56:32

标签: mysql composite

我有三张桌子,如下图所示。 Shows-Actors表中的showid和actorid来自Shows和Actors表中的id列。它们结合起来形成一个复合主键 - 一个演员可以在很多节目中,而节目可以有很多不同的演员。

_______         _______        _______________ 
|Actors |       |Shows|        |Shows-Actors  |  
---------       ---------       --------------
|id|name|       |id|name|      |actorid|showid|
---------       ---------      ---------------
|1 |Bob |       |1 |GoT |      |    1 |1      |
---------       ---------      ----------------
|2 |Lou|        |2 |TWD |      |    1 |2      |
---------       ---------      ----------------

在一个网站页面上,我想显示所有演员姓名的列表,以及他们出现的所有节目。使用上面的数据,页面将显示: 鲍勃显示:GoT,TWD。 娄。显示:......等。

目前我有正确显示的演员列表,但我仍然坚持如何使用复合PK来获取每个演员出现的所有节目的列表。 到目前为止,就与此问题相关的代码而言,这就是我所拥有的。

$query = "SELECT * FROM `Shows-Actors`
          INNER JOIN `Actors`   
          ON `Actors`.`id` = `Shows-Actors`.`acid`
          ORDER BY `Actors`.`name` ASC";

$result = mysqli_query($link, $query) or die(mysqli_error($link));

while($actor = mysqli_fetch_assoc($result))
{
    print '<tr>';   
    print '<td>'.$actor['name'].'</td>';
    //Insert all shows that actor appears in here
    print '</tr>';
}

所有帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你可以像这样加入Shows表:

SELECT 
    Actors.`name`,
    Shows.`name`,
FROM `Shows-Actors`
INNER JOIN `Actors`   
    ON `Actors`.`id` = `Shows-Actors`.`acid`
INNER JOIN Shows
    ON Shows.id = `Shows-Actors`.showid
ORDER BY `Actors`.`name` ASC