как вернуть альтернативные столбцы при объединении - PullRequest
1 голос
/ 04 апреля 2020

У меня есть таблица со списком функций для моего сайта. Скажем, у него есть три столбца:

id_usr - url - landing_page
1        a.php  a.html
2        b.php  b.html
3        c.php  c.html
4        d.php  d.html

Затем у меня есть таблица, в которой для каждого пользователя у меня есть те функции, которые он может отображать:

id_usr - func
1         1
1         3

Мой запрос выбирает те функции, которые пользователь имеет разрешено видеть и возвращает их URL. Таким образом, с примерами данных он возвращает

a. php, c. php

И это правильно. Запрос:

SELECT titolo, descr1,descr2, url, url_opz
FROM `funzioni` JOIN funz_abilitate ON funz_abilitate.id_funzione=id
WHERE funz_abilitate.id_user = $id

Мне интересно, как улучшить мой запрос, чтобы вернуть целевую страницу для функций, которые не авторизованы. Таким образом, результат должен быть:

a. php, b. html, c. php, d. html

Итак для тех страниц, которые не находятся в пределах досягаемости для пользователя, вместо URL-адреса возвращают значение столбца landing_page.

Как мне go для этого с mysql 5.7? Отредактировано, чтобы сделать колонки более читабельными

1 Ответ

3 голосов
/ 04 апреля 2020

Вы можете использовать левое соединение, а затем использовать выражение case, чтобы проверить, разрешена страница или нет:

SELECT    f.id, CASE WHEN id_user IS NULL NOT NULL THEN url ELSE landing_page END
FROM      funzioni f
LEFT JOIN funz_abilitate fa ON fa.id_funzione = f.id AND fa.id_user = $id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...