Подтвердить что ты не робот

MySQL LEFT JOIN с дополнительным значением во второй таблице

У меня две таблицы: projects и user_licenses.

Я хотел бы захватить весь список проектов из базы данных, а также состояние текущей лицензии пользователя. Таблица лицензий имеет поле идентификатора пользователя, которое я проверяю на переменную $_SESSION для значения. Дело в том, что у них может не быть лицензии, или невостребованный посетитель может захотеть увидеть список проектов. Мой вопрос заключается в следующем: как я могу получить данные из левой таблицы, всегда отображаемые, но только захватывать данные для этой строки из правой таблицы при выполнении определенных условий?

В настоящий момент у меня есть запрос:

   SELECT Projects.*, 
          UserLicenses.* 
     FROM Projects 
LEFT JOIN UserLicenses ON Projects.id = UserLicenses.project_id 
    WHERE UserLicenses.user_id = 12 
 ORDER BY name ASC
4b9b3361

Ответ 1

Добавьте дополнительные условия в предложение on левого соединения. Они будут влиять только на объединенную таблицу.

  SELECT Projects.*, 
          UserLicenses.* 
     FROM Projects 
LEFT JOIN UserLicenses 
       ON Projects.id = UserLicenses.project_id 
          and UserLicenses.user_id = 12 
          and UserLicences.Question = '6*7'
          and UserLicences.Answer = 42
 ORDER BY name ASC

Это приведет к возврату проектов без соответствующих лицензий.

Ответ 2

Переместите условие UserLicenses в сторону от WHERE и до состояния JOIN. Имея это в части WHERE, вы никогда не увидите эти "левые" строки, потому что они отфильтрованы.

Вы также можете использовать WHERE (UserLicenses.user_id = 12 OR UserLicenses.user_id IS NULL) Не делай этого. Просто переместите его в условие соединения следующим образом:

LEFT JOIN UserLicenses ON (Projects.id = UserLicenses.project_id AND UserLicenses.user_id = 12)

Ответ 3

Вы можете использовать LEFT JOIN

Если его условия совпадают, тогда значения показывают, что в противном случае отображается нулевое значение.