Я ценю ваше терпение, так как я все еще пытаюсь научиться соединять столы. В прошлом я выполнял соединения между двумя таблицами и вкладывал их в php-код, который, я уверен, неверен и очень неэффективен. Я хотел бы научиться "правильно".

Вот мой запрос до сих пор. Я получаю сообщение об ошибке: неизвестный столбец в предложении on

SELECT PermissionID FROM Permissions 
INNER JOIN PermissionsAssigned ON Permissions.PermissionID = PermissionsAssigned.PermissionID
INNER JOIN Roles ON PermissionsAssigned.RoleID = Roles.RoleID
INNER JOIN RolesAssigned ON Roles.RoleID = RolesAssigned.RoleID
INNER JOIN UserDirectory ON RolesAssigned.UserID = UserDirectory.UserID
WHERE UserDirectory.UserID = 4

CREATE TABLE IF NOT EXISTS `Permissions` (
  `PermissionID` int(11) NOT NULL AUTO_INCREMENT,
  `Description` tinytext NOT NULL,
  PRIMARY KEY (`PermissionID`),
  UNIQUE KEY `ID_UNIQUE` (`PermissionID`),
  KEY `Index 1` (`PermissionID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `PermissionsAssigned` (
  `PermissionsAssignedID` int(11) NOT NULL AUTO_INCREMENT,
  `Permission ID` int(11) NOT NULL DEFAULT '0',
  `RoleID` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`PermissionsAssignedID`),
  UNIQUE KEY `PermissionsAssignedID_UNIQUE` (`PermissionsAssignedID`),
  KEY `FK_PermissionsAssigned_Permissions` (`Permission ID`),
  KEY `FK_PermissionsAssigned_Roles` (`RoleID`),
  KEY `Index 1` (`PermissionsAssignedID`),
  CONSTRAINT `FK_PermissionsAssigned_Permissions` FOREIGN KEY (`Permission ID`) REFERENCES `Permissions` (`PermissionID`),
  CONSTRAINT `FK_PermissionsAssigned_Roles` FOREIGN KEY (`RoleID`) REFERENCES `Roles` (`RoleID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `Roles` (
  `RoleID` int(11) NOT NULL AUTO_INCREMENT,
  `Description` tinytext NOT NULL,
  PRIMARY KEY (`RoleID`),
  UNIQUE KEY `ID_UNIQUE` (`RoleID`),
  KEY `Index 1` (`RoleID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `RolesAssigned` (
  `RoleAssignedID` int(11) NOT NULL AUTO_INCREMENT,
  `UserID` int(11) NOT NULL,
  `RoleID` int(11) NOT NULL,
  PRIMARY KEY (`RoleAssignedID`),
  UNIQUE KEY `ID_UNIQUE` (`RoleAssignedID`),
  KEY `Index 1` (`RoleAssignedID`),
  KEY `FK_RolesAssigned_UserDirectory` (`UserID`),
  KEY `FK_RolesAssigned_Roles` (`RoleID`),
  CONSTRAINT `FK_RolesAssigned_Roles` FOREIGN KEY (`RoleID`) REFERENCES `Roles` (`RoleID`),
  CONSTRAINT `FK_RolesAssigned_UserDirectory` FOREIGN KEY (`UserID`) REFERENCES `UserDirectory` (`UserID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `UserDirectory` (
  `UserID` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`UserID`),
  UNIQUE KEY `UserID_UNIQUE` (`UserID`),
  KEY `Index 1` (`UserID`),
  KEY `FK_UserDirectory_Departments` (`DepartmentID`),
  CONSTRAINT `FK_UserDirectory_Departments` FOREIGN KEY (`DepartmentID`) REFERENCES `Departments` (`DepartmentID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Спасибо! Мэтью

-1
Matthew23 25 Фев 2015 в 21:02
1
Если вы получаете неизвестный столбец, вы запрашиваете неизвестный столбец. Что такое точная ошибка?
 – 
Jay Blanchard
25 Фев 2015 в 21:04
Опубликуйте информацию о своих таблицах
 – 
Adrian Cid Almaguer
25 Фев 2015 в 21:11
Неизвестный столбец PermissionsAssigned.PermissionID в предложении on
 – 
Matthew23
25 Фев 2015 в 21:17
Я отредактировал пост со структурой таблицы.
 – 
Matthew23
25 Фев 2015 в 21:22
2
Таблица PermissionsAssigned не содержит столбцов PermissionID, это просто :)
 – 
Pratik
25 Фев 2015 в 21:34

2 ответа

CREATE TABLE IF NOT EXISTS `PermissionsAssigned` (
  `PermissionsAssignedID` int(11) NOT NULL AUTO_INCREMENT,
  ***`Permission ID`*** int(11) NOT NULL DEFAULT '0',

ЗДЕСЬ проблема измените идентификатор разрешения на PermissionID в вашей базе данных

1
Atif 26 Фев 2015 в 00:02

Вам нужно правильно определить таблицу, например

CREATE TABLE IF NOT EXISTS `PermissionsAssigned` (
  `PermissionsAssignedID` int(11) NOT NULL AUTO_INCREMENT,
  `PermissionID` int(11) NOT NULL DEFAULT '0'`, .................

PermissionID должно быть целым словом. Проверьте в своем коде наличие места.

0
Pratik 25 Фев 2015 в 21:38