php - 如何搜索 mysql 表,以便它只返回包含存储在另一个表中的可选 Actor 列表的 DVD?

标签 php mysql sql

我在是否要发布这个问题上犹豫不决,因为我一整天都在想,想不出一个简单的方法来表达这个问题,所以对这个标题感到抱歉。

我是 mysql 和 php 的新手。我想用几个表创建一些非常简单的东西,但我没有意识到我想要做的事情并没有在我刚刚读的书中涵盖。

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

我有另一个名为 staring 的表,其中包含 Actor 和 dvdId。

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

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

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);
}

所以现在我只需要返回包含用户输入的所有 Actor 的结果。如果用户输入了 Actor 姓名,我必须检查它是否只返回包含这些 Actor 的 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 与任何提供的 Actor 相匹配),但我知道这会让您朝着正确的方向前进。

关于php - 如何搜索 mysql 表,以便它只返回包含存储在另一个表中的可选 Actor 列表的 DVD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226670/

相关文章:

php - CronJob 在午夜不工作,但如果我将它设置为每 5 分钟一次,它就会工作

php - 计数 View (关系数据库)

mysql - 是否可以在 MYSQL 中动态选择列名,其中列名是 N 个已知值中的第一个?

MySQL 在 ANY 和 ALL 之间进行选择

php - 如何在cms页面调用phtml文件设置页面标题

php - PDO mysql 显示 COUNT DISTINCT

php - 将表的 id 调用到新表并将值插入到该新表中

sql - 使用脚本在 SQL Server 中的其他列之间插入列

php - 向多维数组添加数据

php - 表单无法添加到wordpress插件子菜单页面