DROP TABLE IF EXISTS `objects_access`; CREATE TABLE `objects_access` ( `master` int(10) unsigned NOT NULL default '0', `map` smallint(6) unsigned NOT NULL default '0', `slave` int(10) unsigned NOT NULL default '0', `access` int(10) unsigned NOT NULL default '0', UNIQUE KEY `access_u` (`master`,`map`,`slave`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `objects_access` VALUES (1,0,0,700),(1,1,1,400),(1,5,5,400),(1,12,12,400),(1,12,32,400),(4,12,32,400); DROP TABLE IF EXISTS `objects_path`; CREATE TABLE `objects_path` ( `id` int(10) unsigned NOT NULL default '0', `pid` int(10) unsigned NOT NULL default '0', `map` smallint(6) unsigned NOT NULL default '0', `level` tinyint(4) unsigned NOT NULL default '0', `title` varchar(255) default NULL, PRIMARY KEY (`id`,`pid`,`map`), KEY `level` (`level`), KEY `id` (`id`,`map`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `objects_path` VALUES (6,5,12,7,'a'),(12,0,0,7,'a'),(12,1,0,7,'a'),(12,5,5,7,'a'),(12,5,12,7,'a'); SELECT b.sc FROM (SELECT (SELECT a.access FROM objects_access a WHERE a.map = op.map AND a.slave = op.pid AND a.master = 1) ac FROM objects_path op WHERE op.id = 12 AND op.map = 0) b;