Php 如何搜索mysql表,使其只返回DVD,其中包含存储在另一个表中的可选演员列表?

Php 如何搜索mysql表,使其只返回DVD,其中包含存储在另一个表中的可选演员列表?,php,mysql,sql,Php,Mysql,Sql,我不知道是否要发布这个,因为我已经思考了一整天,想不出一个简单的方式来表达这个问题,所以对标题感到抱歉 我是mysql和php新手。我想用几张桌子做一些非常简单的东西,但我没有意识到我想做的事情并没有包含在我刚刚读过的书中 我创建了一个dvd数据库。表DVD包含标题、流派和唯一的自动增量id 我还有一张桌子叫Starting,里面有一个演员和DVD ID 我希望用户能够根据dvd的标题、类型或演员在dvd中的主演来选择搜索dvd 我遇到的问题是,我不知道如何添加到查询中,以便它只返回包含所有演员

我不知道是否要发布这个,因为我已经思考了一整天,想不出一个简单的方式来表达这个问题,所以对标题感到抱歉

我是mysql和php新手。我想用几张桌子做一些非常简单的东西,但我没有意识到我想做的事情并没有包含在我刚刚读过的书中

我创建了一个dvd数据库。表DVD包含标题、流派和唯一的自动增量id

我还有一张桌子叫Starting,里面有一个演员和DVD ID

我希望用户能够根据dvd的标题、类型或演员在dvd中的主演来选择搜索dvd

我遇到的问题是,我不知道如何添加到查询中,以便它只返回包含所有演员的DVD(如果列出了演员)。这就是我到目前为止所做的,并且按照我的预期工作

function getDvds($title, $genre, $staring) { 
    // $staring will be an array of actor names

    $query = "SELECT * FROM dvds WHERE 1";

    if (!empty($title)) {
        $query .= " AND title = '$title'";
    }

    if (!empty($genre)) {
        $query .= " AND genre = '$genre'";
    }

    $result = $this->mysqli->query($query);
}

所以现在我只需要返回结果,如果它包含用户输入的所有参与者。如果用户输入了演员姓名,我必须检查它是否只返回包含这些演员的DVD。我对如何做到这一点感到困惑。

您希望使用联接,因为您希望从多个表中提取信息

如果
$starring
是一个名称数组,则可以执行以下操作:

if (!empty($starring)) {
    $query .= " INNER JOIN actors on actors.dvdId = dvds.dvdId WHERE";
    foreach( $starring as $name )
         $query .= " starring LIKE '%$name%' OR";
    substr( $query, 0, -3 );  //Remove last OR
}

这里的逻辑并不完美(将所有DVD与任何提供的演员匹配),但我知道这将使您朝着正确的方向前进。

谢谢,看起来不错。我要和它玩一玩。在我看来,我应该能够改变或改变,并且它将按照预期工作。我的心累了,所以我明天再回来。再次感谢。如果您将其更改为
,则它将尝试在您的
星号表的同一条目中查找所有这些名称。因此,如果您说它将所有dvd与提供的任何演员匹配,这是否意味着它不考虑dvd的标题或流派?如果是这样的话,我仍然不确定如何做到这一点。您最好使用
LIKE
操作符,除非您正在搜索与标题完全匹配的内容,等等。。。此外,使用MySQL中的
DVD
明星表(或
actors
)的结构更新您的问题,可以得到更清晰的答案。$query=“从DVD中选择不同的标题,dvds.dvdid。dvdid=actors.dvdid,其中(name='Bob Smith'或name='Fred Flintstone')以及"火箭",;谢谢你的帮助。