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
Se puede usar un LEFT JOIN y luego usar una case
expresió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