Консультируйся между 4 подмостками mysql с внешними ключами (foreign key)

У меня есть эти подмостки в моей базе данных, чтобы распределять списки моим пользователям:

    tbl usuario
    id
    nombre
    contraseña
    correo
    fk_rol
--------------------
    tbl rol
    id_rol
    nombre
    descripcion
--------------------
    tbl pagina
    id_pagina
    url
---------------------
    tbl rol_pagina
    fk_rol
    fk_pagina

Я нуждаюсь в консультации, которая возвращала бы мне имя пользователя и страницы, к которым он имеет доступ, эта query что у меня есть на данный момент, он показывает мне, в который url он имеет доступ каждый rol, но мне остается определять, которого пользователь

select r.nombre, p.Url from rol r, pagina p, rol_pagina n, usuario u 
where r.id_rol = u.fk_rol
and n.fk_rol = r.Id_rol 
and n.fk_pagina = p.id_pagina
and u.fk_rol = 1

Подмостки:

create table Usuario (
   id_usuario int not null auto_increment,
   nombre varchar(30) not null,
   Contrasena varchar(30) not null,
   id_rol int not null,
   primary key (id_usuario),
   constraint fk_rol foreign key (id_rol)
      references rol(id_rol));

create table rol (
   id_rol int not null auto_increment,
   nombre varchar(30) not null,
   primary key (id_rol));

create table pagina (
   id_pagina int not null auto_increment,
   Url varchar(100) not null,
   primary key (id_pagina));

create table rol_pagina (
   id_rol int not null,
   id_pagina int not null,
   constraint fkrol foreign key (id_rol)
      references rol(id_rol),
   constraint fkpagina foreign key (id_pagina)
      references pagina(id_pagina));
1
задан 22.01.2017, 03:49
0 ответов

Чтобы сочетать подмостки с Ваш FOREIGN KEYs ты должен использовать JOIN.

Следующий SELECT он дает тебе все пользователи и страницы, к которым они имеют доступ для списка с id_rol = 1

SELECT r.nombre, p.Url
FROM Usuario AS u INNER JOIN rol AS r ON u.fk_rol = r.id_rol
INNER JOIN rol_pagina AS n ON n.fk_rol = r.id_rol
INNER JOIN pagina AS p ON n.fk_pagina = p.id_pagina
WHERE u.fk_rol = 1 ;

Чтобы получать все страницы, к которым пользователь (искавший из-за id) имеет доступ, ты используешь:

SELECT r.nombre, p.Url
FROM Usuario AS u INNER JOIN rol AS r ON u.fk_rol = r.id_rol
INNER JOIN rol_pagina AS n ON n.fk_rol = r.id_rol
INNER JOIN pagina AS p ON n.fk_pagina = p.id_pagina
WHERE u.id_usuario = ? ;

Чтобы искать страницы пользователя, идентифицированного по имени и списку с id_rol = 1 ты используешь:

SELECT r.nombre, p.Url
FROM Usuario AS u INNER JOIN rol AS r ON u.fk_rol = r.id_rol
INNER JOIN rol_pagina AS n ON n.fk_rol = r.id_rol
INNER JOIN pagina AS p ON n.fk_pagina = p.id_pagina
WHERE u.nombre = ? AND u.fk_rol = 1 ;

Я рекомендую тебя основной руководитель такого SQL как этот.

Начнись несмотря на то, что изучает, что он значит SELECT и для ue он используется WHERE.

Больше информации о JOIN

0
ответ дан 03.12.2019, 17:35
  • 1
    там два from в консультации... –  22.01.2017, 00:05
  • 2
    ups, прощение, я olvidó удалять то, что он превышал despué s, JOIN добавляют. Не забывай CREATE пожалуйста. –  22.01.2017, 00:11
  • 3
    консультация функционирует хорошо., но я devuelbe список, и который ты листаешь, имеет этот список, но всех, как он сделал бы, чтобы знать о единственном пользователе –  22.01.2017, 01:02
  • 4
    Если ты хочешь работать с SQL serí в рекомендуемый, SQL изучает. Я ты иду в solicionar твоя проблема концентрируется и на том, чтобы оставить тебе ссылку, чтобы учиться. –  22.01.2017, 02:22

Теги

Похожие вопросы