我需要哪个连接使用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.
}