2013-12-10 3 views
0

Я этот формат базы данных ниже (взято из PHPMyAdmin, таблицы являются реляционные уже):запрос, чтобы получить данные из реляционных баз данных в MySQL

database

Я пытаюсь получить все «videos.Video_Name , videos.Video_URL "с определенным" tags.Tag_Name "через реляционное сопоставление" tagmap ". Я никогда не использовал 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

'$ _GET [tag]' может быть undefined может быть левым соединением не требуется –

+1

У всех таблиц есть значения? Кроме того, ** не помещайте необработанные переменные в ваш запрос **! Ваш запрос широко открыт для SQL Injection. – BenM

+0

Строка 'FROM' должна ссылаться на' теги' не 'tagmap' также –

ответ

-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]' 

Надеется, что он не будет давать какую-либо ошибки.

Спасибо.

+0

Я пробовал, и он не работал. Я тоже. Или приглашение присоединиться к ЛЕВ. Это результат: http://i.imgur.com/71Efcrq.png из этого фрагмента кода: http://i.imgur.com/DXYf3gw.png – Jewel

+0

Twitch, теперь я изменил запрос. Теперь, пожалуйста, проверьте еще раз. –

+0

-1: это функционально ничем не отличается от исходного запроса. – symcbean

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]'; 

(BTW вы можете читать на SQL Injection).

Смежные вопросы