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

标签 mysql composite

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

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

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

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

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

我们将不胜感激。

最佳答案

您可以像这样加入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

关于mysql - 如何使用复合主键从特定字段获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616758/

相关文章:

MySQLd : Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

javascript - 如何清除 Canvas 以进行重绘

java - 复合继承: how to assign a final field at sub-class constructor which depends on 'this' value (backward reference)?

java - 如何将数学表达式树转换为简化形式?

c# - Fluent NHibernate Composite ID表问题

design-patterns - 我想知道命令模式和复合模式之间的关系

javascript - 如何使用php清除和填充MySQL表

mysql - 连接表时 SQL 结果存在差异

MySQL:从表 'a.total' 的列 'a.name' 中的值 'b.content' 的计数中填充列 'b'

java - 在 MySQL 上使用 NoSQL 数据库