如何 return 加入替代列

how to return alternative columns on join

我有一个 table,其中包含我网站的功能列表。假设它有三列:

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

然后我有一个 table 对于每个用户我有他可以显示的那些功能:

id_usr - func
1         1
1         3

我的查询选择了允许用户查看的功能以及 return 他们的 url。因此,对于示例数据,它 returns

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

我想知道如何改进我对 return 未授权功能登录页面的查询。所以结果应该是:

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

因此对于那些不在用户范围内的页面,而不是 url,return landing_page 列的值。

如何使用 mysql 5.7 继续这个? 编辑以使列更易读

您可以使用左连接,然后使用 case 表达式来检查页面是否被允许:

SELECT    f.id, CASE WHEN id_user IS 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