从存在 id(来自另一个表)的一个表中选择


Select from one table where id (from another table) exists

>首先,我只想说,我很抱歉这个糟糕的标题。我真的很难用简短的一句话来解释我面临的问题。

我有一个名为actor的表,其中包含一个aID(主键)和一个aName以及更多的东西。我还有一个名为视频的表,其中包含vID(主键)和其他数据。我拥有的第三个也是最后一个表称为连接,该表包含一个主键,一个cVideoID和一个cActorID

假设我创建了一个视频,当我导航到该视频*www.example.com/video.php?v=primary_key*时,我想打印出该电影中的所有演员(演员1,演员2,演员3和演员4)。因此,我创建了连接表来跟踪所有电影演员的连接。对于我创作的每一部电影,我都会将演员与电影联系起来。

我以为我可以做这样的事情:

<?php
    $result2 = mysql_query("SELECT `actors`.`aID`, `actors`.`aName` FROM `actors` WHERE `connections`.`cVideoID` = {$_get['v']}");
    while($actors = mysql_fetch_array($result2))
    {
        echo "<a href='actor.php?id={$actors['aID']}>{$actors['aName']}</a> ';
    }
?>

但这似乎行不通。有什么想法吗?

您要做的是从connections中选择所有条目,其中视频ID是所选视频。然后,在参与者表上加入,以获取有关找到的参与者的所有信息。

示例:获取特定视频 ID 的所有演员姓名:

SELECT a.aName 
FROM connections c 
  LEFT JOIN actors a 
  ON a.aID = c.aID 
WHERE c.vID = 1;

SQL 小提琴

这里需要的是一个连接。普通的左连接的工作方式如下:

LEFT JOIN [name of table] [name of table you will want to use] 
       ON ([where statements searching for the right columns to join]) 

因此,您的查询将如下所示:

   SELECT a.aID, a.aName 
     FROM `connections` c 
LEFT JOIN `author` a ON (c.cActorID=a.aID) 
    WHERE c.cVideoID=[id of the video]

现在首先你说你想要从表中捕获aID和aName列的数据库,接下来你使用FROM语句将连接表"导入"为"c"。然后,您加载作者表并使其可作为"a"访问(请参阅选择语句a.[...]),并且您还说它应该在每个c.cActorID=a.aID上连接两个表,最后您创建一个where语句来声明您只搜索c.cVideoId=[id]的视频。