我需要哪个连接使用PHP过滤SQL中的数据?
我很困惑,这就是我想要的: 用户将使用我需要哪个连接使用PHP过滤SQL中的数据?,php,mysql,join,Php,Mysql,Join,我很困惑,这就是我想要的: 用户将使用GET方法发送1或2个值(仅tag1或tag1和tag2) 这就是我的表结构的外观: 表名:“tmdb_电影” 表名:“标记” 现在,如果用户选择$tag1作为犯罪,选择$tag2作为动作,那么《黑暗骑士》电影将回响,因为它包含两个标签 编辑:这是我的代码: $stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.tmdb_id,GROUP_CONCAT(DISTINCT
GET方法发送1或2个值(仅tag1
或tag1
和tag2
)
这就是我的表结构的外观:
表名:“tmdb_电影”
表名:“标记”
现在,如果用户选择$tag1
作为犯罪,选择$tag2
作为动作,那么《黑暗骑士》电影将回响,因为它包含两个标签
编辑:这是我的代码:
$stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.tmdb_id,GROUP_CONCAT(DISTINCT tag.tag_name SEPARATOR ', ') AS tag
FROM tmdb_movies
JOIN tag ON tag.tag_tmdb_id=tmdb_movies.tmdb_id
GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id
");
首先,以CSV
格式获取所有标记数据,然后运行此查询
SELECT `tmdb_movies`.`movie_title` FROM `tmdb_movies` LEFT JOIN `tag` ON
`tag`.`tmdb_id` = `tmdb_movies`.`tmdb_id` WHERE `tag`.`tag` IN ($tag1, $tag2)
根据您的代码:
$stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.tmdb_id,GROUP_CONCAT(DISTINCT tag.tag_name SEPARATOR ', ') AS tag
FROM tmdb_movies
JOIN tag ON tag.tag_tmdb_id=tmdb_movies.tmdb_id
WHERE tag IN (:tag1,:tag2)
GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id
");
$stmt->bindParam(":tag1",$tag1);
$stmt->bindParam(":tag2",$tag2);
如果要搜索的标签超过2个,请使用此选项
如果你有一个可变数量的标签,用户可以搜索你必须得到一个更狡猾的。您将需要生成一个查询,其中包含的参数(?)与要搜索的标记数量相同。然后可以通过循环进行绑定:
$searchTags = [ "tag1", "tag2", "tag3",...., "tagN" ];
$stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.tmdb_id,GROUP_CONCAT(DISTINCT tag.tag_name SEPARATOR ', ') AS tag
FROM tmdb_movies
JOIN tag ON tag.tag_tmdb_id=tmdb_movies.tmdb_id
WHERE tag IN (".implode(",",array_fill(0,count($searchTags)),"?") .")
GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id
");
foreach ($searchTags as $index => $tag) {
$stmt->bindValue($index+1,$tag); //bindValue is important.
}
请展示一些作品…我只是问一下连接名称…比如左连接、右连接、内部连接@sylvainatoumani这是一个关于连接和内部连接或自然连接的好指南。在('tag1','tag2')
中还会有一个where条件where标记。也可能是一个不同的电影标题
来获得每个标题一次。@apokryfos我认为标记不能在$tag1或$tag2内,因为它们是变量???,让我试试,但我不明白,把代码按顺序排列好吗?并且它们的标签最多为2个。我还遇到了这个错误Parse error:syntax error,意外的“;”,第行中应为“,”或“,”
中的WHERE标记(“.intlode(,”,数组填充(0,count($searchTags),“?”)@JohnDoo我把它整理得更清楚了一点。希望它更清楚。我想你没有理解我的问题或其他什么。在代码中的任何地方,我都看不到$tag1
和$tag2
代码如何知道值?在你的问题中,你提到了$tag1
和$tag2
。我刚才才看到categor这个词我错了,我写的是category1而不是tag1…它是$tag1
$stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.tmdb_id,GROUP_CONCAT(DISTINCT tag.tag_name SEPARATOR ', ') AS tag
FROM tmdb_movies
JOIN tag ON tag.tag_tmdb_id=tmdb_movies.tmdb_id
WHERE tag IN (:tag1,:tag2)
GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id
");
$stmt->bindParam(":tag1",$tag1);
$stmt->bindParam(":tag2",$tag2);
$searchTags = [ "tag1", "tag2", "tag3",...., "tagN" ];
$stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.tmdb_id,GROUP_CONCAT(DISTINCT tag.tag_name SEPARATOR ', ') AS tag
FROM tmdb_movies
JOIN tag ON tag.tag_tmdb_id=tmdb_movies.tmdb_id
WHERE tag IN (".implode(",",array_fill(0,count($searchTags)),"?") .")
GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id
");
foreach ($searchTags as $index => $tag) {
$stmt->bindValue($index+1,$tag); //bindValue is important.
}