0
이이 4 개 개의 테이블을 조인 가장 효율적인 방법입니다에 가입? 또한 각 테이블의 일부 행만 선택할 수 있습니까? 나는 컬럼의 이름으로 * 변경하려고 시도했지만 studentlist의 컬럼 만 허용됩니다.SQL 쿼리. 내부는 4 개 테이블
SELECT c.classID, c.instrument, c.grade, u.ID, u.firstname, u.lastname, u.lastsongplayed, u.title
FROM studentlist s
INNER JOIN classlist c ON s.listID = c.classID
INNER JOIN (
SELECT *
FROM users u
INNER JOIN library l ON u.lastsongplayed = l.fileID
)
u ON s.studentID = u.ID
WHERE teacherID =3
ORDER BY classID
LIMIT 0 , 30
데이터베이스 구조 :
CREATE TABLE IF NOT EXISTS `classlist` (
`classID` int(11) NOT NULL AUTO_INCREMENT,
`teacherID` int(11) NOT NULL,
`instrument` text,
`grade` int(11) DEFAULT NULL,
PRIMARY KEY (`classID`),
KEY `teacherID_2` (`teacherID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;
CREATE TABLE IF NOT EXISTS `studentlist` (
`listID` int(11) NOT NULL,
`studentID` int(11) NOT NULL,
KEY `teacherID` (`studentID`),
KEY `studentID` (`studentID`),
KEY `listID` (`listID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `users` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(60) NOT NULL,
`password` varchar(60) NOT NULL,
`firstname` text NOT NULL,
`lastname` text NOT NULL,
`sessionID` varchar(60) DEFAULT NULL,
`lastlogin` time DEFAULT NULL,
`registerdate` date NOT NULL,
`isteacher` tinyint(1) DEFAULT NULL,
`isstudent` tinyint(1) DEFAULT NULL,
`iscomposer` tinyint(1) DEFAULT NULL,
`lastsongplayed` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `ID` (`ID`),
UNIQUE KEY `email` (`email`,`sessionID`),
KEY `ID_2` (`ID`),
KEY `ID_3` (`ID`),
KEY `lastsongplayed` (`lastsongplayed`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=63 ;
CREATE TABLE IF NOT EXISTS `library` (
`fileID` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(11) NOT NULL,
`uploaddate` datetime NOT NULL,
`title` varchar(60) NOT NULL,
`OrigComposer` varchar(60) NOT NULL,
`composer` varchar(60) NOT NULL,
`genre` varchar(60) DEFAULT NULL,
`year` year(4) DEFAULT NULL,
`arrangement` varchar(60) DEFAULT NULL,
PRIMARY KEY (`fileID`),
KEY `userID` (`userID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=77 ;
xx 결과를 함께 그룹화 할 수 있습니까? 모든 수업에 대해 새로운 div를 만들고 그 수업에 학생들을 보여주고 싶습니다. – Thomas
다른 내부 조인을 추가했습니다. 아직도 효율적인가요? – Thomas
* 열이 아닌 행 *. 파생 테이블을 사용하여 또는 [JOIN에 절에 추가 조건] 각 테이블 * * 일부 행을 선택 (http://dev.mysql.com/doc/refman/5.6/en/join.html). "ON과 함께 사용되는 conditional_expr은 WHERE 절에서 사용할 수있는 양식의 조건부 표현식입니다. 일반적으로 테이블을 조인하는 방법을 지정하는 조건에는 ON 절을 사용하고 원하는 행을 제한하려면 WHERE 절을 사용해야합니다 결과 세트. " 유지할 것인지 결정하기 전에 이러한 메소드 (파생 테이블 대 WHO의 JOIN 조건 조건)에 대한 EXPLAIN 계획을 읽으십시오. –