Справка по запросу присоединения MySQL

В основном у меня есть запрос mysql примерно так:

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

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

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

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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
341
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Для внутреннего соединения требуются совпадающие строки из таблицы по обе стороны от соединения.

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

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

Покажи, как много я знаю! Большое спасибо!

NJ. 23.01.2009 03:04
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, что все испортило. Спасибо :)

NJ. 23.01.2009 03:07

Пожалуйста, сделайте это по-другому. Явный синтаксис JOIN намного проще соблюдать, и, как показано здесь, не всегда ясно, какое соединение вы получаете в этом синтаксисе. На других серверах SQL вы не получите левое соединение, как написано.

Joe 23.01.2009 04:55

Другие вопросы по теме