J'ai 2 tables. L'un est 'page_links' et l'autre est 'rpp'. La table page_links est le surensemble de la table rpp.(mySQL) Impossible d'interroger 2 tables correctement pour les données
Voici le schéma de mes tables:
-- Table structure for table `page_links`
--
CREATE TABLE IF NOT EXISTS `page_links` (
`page` varchar(255) NOT NULL,
`page_link` varchar(100) NOT NULL,
`heading_id` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`page`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `page_links`
--
INSERT INTO `page_links` (`page`, `page_link`, `heading_id`) VALUES
('a1.php', 'A1', 8),
('b1.php', 'B1', 8),
('c1.php', 'C1', 5),
('d1.php', 'D1', 5),
('e1.php', 'E1', 8),
('f1.php', 'F1', 8),
('g1.php', 'G1', 8),
('h1.php', 'H1', 1),
('i1.php', 'I1', 1),
('j1.php', 'J1', 8),
('k1.php', 'K1', 8),
('l1.php', 'L1', 8),
('m1.php', 'M1', 8),
('n1.php', 'N1', 8),
('o1.php', 'O1', 8),
('p1.php', 'P1', 4),
('q1.php', 'Q1', 5),
('r1.php', 'R1', 4);
-- Table structure for table `rpp`
--
CREATE TABLE IF NOT EXISTS `rpp` (
`role_id` tinyint(3) unsigned NOT NULL,
`page` varchar(255) NOT NULL,
`is_allowed` tinyint(1) NOT NULL,
PRIMARY KEY (`role_id`,`page`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `rpp`
--
INSERT INTO `rpp` (`role_id`, `page`, `is_allowed`) VALUES
(3, 'a1.php', 1),
(3, 'b1.php', 1),
(3, 'c1.php', 1),
(3, 'd1.php', 1),
(3, 'e1.php', 1),
(3, 'f1.php', 1),
(3, 'h1.php', 1),
(3, 'i1.php', 1),
(3, 'l1.php', 1),
(3, 'm1.php', 1),
(3, 'n1.php', 1),
(4, 'a1.php', 1),
(4, 'b1.php', 1),
(4, 'q1.php', 1),
(5, 'r1.php', 1);
Ce que je veux FAIRE:
Je suis en train d'interroger les deux tableaux ci-dessus (en une seule requête) de telle sorte que toutes les pages de page_links sont affichées avec la valeur is_allowed de rpp pour un rôle particulier. Par exemple, je veux obtenir la valeur is_allowed de toutes les pages de rpp pour role_id = 3 et en même temps, liste toutes les pages disponibles de page_links. Un exemple clair de mon résultat attendu serait:
page is_allowed role_id
----------------------------------------
a1.php 1 3
b1.php 1 3
c1.php 1 3
d1.php 1 3
e1.php 1 3
f1.php 1 3
g1.php NULL NULL
h1.php 1 3
i1.php 1 3
j1.php NULL NULL
k1.php NULL NULL
l1.php 1 3
m1.php 1 3
n1.php 1 3
o1.php NULL NULL
p1.php NULL NULL
q1.php NULL NULL
r1.php NULL NULL
Un autre exemple de mon résultat désiré pourrait être obtenu en faisant une LEFT JOIN SUR page_links.page = rpp rpp.page mais nous avons besoin d'omettre l'aide role_id = 3 (ou n'importe quelle valeur) pour être en mesure d'obtenir cela. Mais je veux aussi spécifier le role_id et obtenir les résultats. J'ai besoin de la requête pour pouvoir obtenir ce résultat. J'apprécierais toutes les réponses qui pourraient m'aider avec ceci. Si vous pouvez me suggérer des changements aussi bien dans la conception de la table que dans le but d'obtenir le résultat souhaité, c'est bien aussi. Merci d'avance.
+1 pour fournir des scripts de création, des données de test ET une sortie attendue. J'aimerais pouvoir donner plus. –
@Mark, Merci beaucoup. J'aimerais pouvoir accepter votre réponse, mais ça ne me le permettrait pas. Peut-être la prochaine fois .. :) – Devner