В основном у меня есть запрос mysql примерно так:
mysql_query("SELECT n.title, v.value FROM posts n INNER JOIN votes v ON n.id = v.id");
И что мне нужно сделать, так это получить заголовок из таблицы сообщений и текущее значение голоса из таблицы голосов.
В настоящий момент голоса не сохраняются в таблице голосов, если голосование не происходит. Таким образом, все сообщения с 0 голосами не попадают в таблицу голосов.
Это вызывает ошибку, заключающуюся в том, что он пытается получить заголовок И значение голоса, где идентификатор сообщения = идентификатор значения голосования. Если в таблице голосов нет какой-либо записи, тогда значение должно возвращаться как NULL или 0, но на данный момент весь запрос возвращается как null, поэтому я не могу даже вернуть заголовок.
Как исправить все одним запросом? Я не хочу использовать несколько запросов ... Спасибо :)
Используйте левое соединение вместо внутреннего
Для внутреннего соединения требуются совпадающие строки из таблицы по обе стороны от соединения.
Левое соединение (или левое внешнее соединение, чтобы использовать его полное имя) выбирает все строки из левой таблицы, а затем соответствующие строки справа, возвращая нулевые значения, если в правой таблице нет совпадающих строк, точно так же, как вы запрашиваете .
(Существуют также правые внешние соединения, но того же эффекта можно добиться, изменив условия в предложении ON)
SELECT n.title, v.value FROM posts n LEFT JOIN votes v ON n.id = v.id
ВЫБЕРИТЕ n.title, v.value FROM сообщений как n, голоса как v WHERE n.id = v.id
Попробуй это.
Это то, что у меня было раньше, и это работало раньше, поэтому по умолчанию MySQL должен использовать LEFT JOIN. Только сейчас, когда я переписал запрос, я решил использовать INNER JOIN, что все испортило. Спасибо :)
Пожалуйста, сделайте это по-другому. Явный синтаксис JOIN намного проще соблюдать, и, как показано здесь, не всегда ясно, какое соединение вы получаете в этом синтаксисе. На других серверах SQL вы не получите левое соединение, как написано.
Покажи, как много я знаю! Большое спасибо!