我在下面有这种数据库格式(取自phpmyadmin,这些表已经是关系型的):
我正在尝试通过“tagmap”关系映射获取所有“videos.Video_Name,videos.Video_URL”和某些“tags.Tag_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]'
但它没有返回任何行。
答案 0 :(得分:0)
如果您的查询没有返回原始数据并且没有返回错误,那么它不会“完全无效”。
确实,看一下代码,它应该完全按照你所说的实现。因此,如果它没有返回任何行,那么原因必须是没有匹配的数据。
将其分解以找出缺少数据的位置:
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注入)。
答案 1 :(得分:-1)
现在尝试一下。
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]'
希望它不会给出任何错误。
感谢。