MySQL присоединиться к справке запроса - PullRequest
0 голосов
/ 23 января 2009

В основном у меня есть запрос mysql что-то вроде следующего:

mysql_query("SELECT n.title, v.value FROM posts n INNER JOIN votes v ON n.id = v.id");

И что мне нужно сделать, это взять заголовок из таблицы сообщений и текущее значение голосования из таблицы голосов.

В настоящее время голоса не сохраняются в таблице голосов, если голосование не происходит. Таким образом, все сообщения с 0 голосами отсутствуют в таблице голосов.

Это приводит к ошибке при попытке получить заголовок И значение голосования, где идентификатор сообщения = идентификатор значения голосования. Если в таблице голосов нет ни одной записи, значение должно возвращаться как NULL или 0, но в данный момент весь запрос возвращается как нулевой, поэтому я даже не могу вернуть заголовок.

Как я могу исправить все это в одном запросе? Я не хочу использовать несколько запросов ... Спасибо:)

Ответы [ 3 ]

4 голосов
/ 23 января 2009

Использовать левое соединение вместо внутреннего

Внутреннее объединение требует сопоставления строк таблицы с обеих сторон объединения.

Левое объединение (или левое внешнее объединение для использования его полного имени) выбирает все строки из левой таблицы, а затем сопоставляет строки справа, возвращая нулевые значения, если в правой таблице нет совпадающих строк, как вы просят.

(Существуют также правые внешние соединения, но тот же эффект может быть достигнут путем изменения условий в предложении ON)

0 голосов
/ 23 января 2009

ВЫБРАТЬ n.title, v.value ОТ сообщений как n, голосует как v ГДЕ n.id = v.id

Попробуйте это.

0 голосов
/ 23 января 2009
SELECT n.title, v.value FROM posts n LEFT JOIN votes v ON n.id = v.id
...