cómo devolver columnas alternativas de unirse

Lelio Faieta:

Tengo una tabla con una lista de funcionalidades para mi sitio. Dicen que tiene tres columnas:

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

Entonces tengo una tabla en la que para cada usuario que tengo esas funcionalidades que puede mostrar:

id_usr - func
1         1
1         3

Mi consulta selecciona aquellas funcionalidades que el usuario tiene permiso para ver y devuelve su dirección URL. Así, con los datos de la muestra se vuelve

a.php, c.php

Y esto es correcto. La consulta es:

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

Me pregunto cómo mejorar mi consulta para devolver la página de destino de las funcionalidades que no están autorizadas. Así, el resultado debería ser:

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

Así que para aquellas páginas que no están en el rango para el usuario, en lugar de URL, devolver el valor de la columna de landing_page.

¿Cómo voy en esto con MySQL 5.7? Editado para hacer las columnas más readible

Mureinik:

Se puede usar un LEFT JOIN y luego usar una caseexpresión para comprobar si se permite o no la página:

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

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=406037&siteId=1
Recomendado
Clasificación