Какой MySQL JOIN я использую? - PullRequest
       1

Какой MySQL JOIN я использую?

0 голосов
/ 20 апреля 2011
SELECT comments.comment, comments.title, userBase.uID, userBase.fname FROM comments JOIN userBase WHERE comment.ID=users.ID AND comments.uID='$uID' AND comments.title='$title' 

Однако это дает мне информацию только из базы данных комментариев при использовании:

$row = mysql_fetch_row($result);
    print_r($row);

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Если я правильно понимаю, что вы хотите, это запрос

SELECT comments.comment, comments.title, userBase.uID, userBase.fname 
FROM comments 
INNER JOIN userBase ON comment.ID=users.ID 
                    AND comments.uID='$uID' 
                    AND comments.title='$title'

В любом случае есть несколько проблем с вашими вопросами:

  • Я предполагаю comments и userBase таблицы, не база данных
  • У вас есть AND сразу после предложения WHERE, что не имеет никакого смысла
  • Не ясно, какова связь. Вы уверены, что хотите приравнять comments.ID к userBase.ID? В этом случае вы используете ключ ID для внешнего ключа в комментариях, который не очень читабелен. Вы можете использовать что-то вроде comments.user_id

Редактировать: Для ясности, существует альтернативный синтаксис для объединений, который использует ключевое слово WHERE. Вы можете переписать вышеизложенное как

SELECT comments.comment, comments.title, userBase.uID, userBase.fname 
FROM comments, userBase 
WHERE comment.ID=users.ID 
  AND comments.uID='$uID' 
  AND comments.title='$title'

но это не стандарт SQL. Это работает в MySQL, и я думаю, также в SQLServer, но я не совсем уверен в других поставщиках БД. В любом случае проблема вашего запроса заключается в том, что вы смешивали два разных синтаксиса.

0 голосов
/ 20 апреля 2011

Внутреннее объединение даст вам все строки из обеих таблиц, которые удовлетворяют условию соединения, это условие соединения указано в предложении on (которое вы пропустили).Напротив, левое соединение даст вам все строки из левой таблицы в соединении (первая таблица) и все строки из правой таблицы, которые удовлетворяют условию соединения, и для правого соединения верно обратное.

Я думаю, что вы ищете в своем SQL:

SELECT comments.comment, comments.title, userBase.uID, userBase.fname 
FROM comments INNER JOIN userBase ON comment.ID=users.ID 
WHERE comments.uID='$uID' AND comments.title='$title'
0 голосов
/ 20 апреля 2011

Попробуйте:

SELECT c.comment, c.title, u.uID, u.fname
FROM comments c, userBase u
WHERE c.ID = u.ID
and c.title = '$title'
and c.uID = '$uID'

Я предполагаю, что все ваши переменные были инициализированы и имеют какое-то значение.Для первичного ключа вам не нужно '(цитата) вокруг значения.Кроме того, вам нужно выбрать, используете ли вы оператор стиля JOIN или оператор WHERE = style.

Здесь больше информации об операторах JOINS и WHERE =.http://www.w3schools.com/sql/sql_join.asp http://www.w3schools.com/sql/sql_where.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...