Php 从MySQL中的关系数据库获取数据的查询

Php 从MySQL中的关系数据库获取数据的查询,php,mysql,sql,Php,Mysql,Sql,下面的数据库格式取自phpmyadmin,表已经是关系表了: 我正在尝试通过tagmap关系映射获取所有带有特定标记的videos.Video\u Name、videos.Video\u URL.Tag\u Name。我以前从未真正将MySQL用于SELECT和DELETE之外的任何用途,事实证明,JOIN的语法太难接受了,在这一点上,寻求帮助要比不停地用脑袋撞它来得快 我知道我应该使用JOIN,但我不知道实现我想要的语法 我尝试的完全无效的查询是: SELECT videos.Video_UR

下面的数据库格式取自phpmyadmin,表已经是关系表了:

我正在尝试通过tagmap关系映射获取所有带有特定标记的videos.Video\u Name、videos.Video\u URL.Tag\u Name。我以前从未真正将MySQL用于SELECT和DELETE之外的任何用途,事实证明,JOIN的语法太难接受了,在这一点上,寻求帮助要比不停地用脑袋撞它来得快

我知道我应该使用JOIN,但我不知道实现我想要的语法

我尝试的完全无效的查询是:

SELECT videos.Video_URL, videos.Video_Name
FROM tagmap
INNER JOIN videos ON videos.Video_ID = tagmap.Video_ID
INNER JOIN tagmap ON tagmap.Tag_ID = tags.Tag_ID
WHERE tags.Tag_Name = '$_GET[tag]'
但是它没有返回任何行。

现在试试这个

SELECT videos.Video_Name, videos.Video_URL FROM videos,tags,tagmap
WHERE videos.Video_ID = tagmap.Video_ID AND tags.Tag_ID = tagmap.Tag_ID AND
tags.Tag_Name='$_GET[tag]'
连接的结果相同

SELECT videos.Video_Name, videos.Video_URL FROM tagmap
RIGHT JOIN videos ON videos.Video_ID = tagmap.Video_ID 
LEFT JOIN tags ON tags.Tag_ID = tagmap.Tag_ID 
WHERE tags.Tag_Name = '$_GET[tag]'
希望它不会出现任何错误


谢谢。

如果您的查询没有返回RAW,也没有返回错误,那么它不是完全无效的

事实上,看看代码,它应该完全按照您所说的去实现。因此,如果它不返回任何行,那么原因一定是没有匹配的数据

将其分解以找出数据丢失的位置:

SELECT COUNT(*)
FROM tags
WHERE tags.Tag_Name = '$_GET[tag]';
如果得到非零值,请尝试

SELECT COUNT(DISTINCT tagmap.Video_ID), COUNT(*)
FROM tags INNER JOIN tagmp
ON tags.tag_ID=tagmap.tag_ID
WHERE tags.Tag_Name = '$_GET[tag]';

顺便说一句,您可能想了解SQL注入。

$\u GET[tag]可能未定义,可能需要左连接所有表都有值吗?另外,不要在查询中放置原始变量!您的查询对SQL注入非常开放。FROM行应该引用标记而不是tagmap,因为“$\u GET[tag]前面有一个引号,但后面没有引号。此外,“tag”本身周围没有引号$\u GET['tag']。可能也是这样。你的问题似乎correct@ArunKillu事先有一个if-isset$\u-get[tag],所以不是这样。我真的说不出我在这里需要什么类型的加入我试过了,但没有成功。我的也没有。或者加入左派的建议。结果是:从这段代码中:Twitch,现在我已经更改了查询。现在请再次检查。-1:这在功能上与原始查询没有区别。Hmh。这确实有效,但是有没有一种方法可以通过JOIN来实现呢?我想这就是JOIN的作用,而且会更快。不过没问题,在那之前我会接受这个答案。