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