這個問題是從我的@Need some advice and feedback on coding a many:many relationship in MySQL的另外一個問題的延伸一些幫助......需要格式化MySQL查詢返回的信息
我對錶以下MySQL代碼:
DROP TABLE IF EXISTS `person` ;
CREATE TABLE `person` (
`personID` INT(5) NOT NULL AUTO_INCREMENT ,
`firstName` VARCHAR(50) NOT NULL ,
`lastName` VARCHAR(50) NOT NULL ,
`dateOfBirth` DATE NOT NULL ,
`personType` CHAR(6) NOT NULL,
`photo` BLOB NULL DEFAULT NULL ,
PRIMARY KEY (`personID`))
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `parent` ;
CREATE TABLE `parent` (
`parentID` INT(5) NOT NULL,
PRIMARY KEY (`parentID`),
FOREIGN KEY (`parentID`) REFERENCES `person` (`personID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
DROP TABLE IF EXISTS `player` ;
CREATE TABLE Player (
`playerID` INT(5) NOT NULL,
`motherID` INT(5),
`fatherID` INT(5),
`schoolID` INT(5),
PRIMARY KEY (`playerID`),
FOREIGN KEY (`playerID`) REFERENCES `person` (`personID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`motherID`) REFERENCES `parent` (`parentID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`fatherID`) REFERENCES `parent` (`parentID`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`schoolID`) REFERENCES `school` (`schoolID`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
SHOW WARNINGS;
我想格式化的查詢,例如,它會返回的信息,像這樣:
+----------+-----------------+----------------+-----------------+----------------+
| ParentID | ParentFirstName | ParentLastName | PlayerFirstName | PlayerLastName |
+----------+-----------------+----------------+-----------------+----------------+
| 1 | John | Doe | Maggie | Doe |
| 1 | John | Doe | Rob | Doe |
| 2 | Jane | Doe | Rob | Doe |
| 2 | Jane | Doe | Maggie | Doe |
| 3 | Peter | Smith | Neil | Smith |
| 3 | Peter | Smith | Chad | Smith |
| 4 | Mary | Mason | Neil | Smith |
| 4 | Mary | Mason | Chad | Smith |
+----------+-----------------+----------------+-----------------+----------------+
我注意到名字在上面visualizatio反覆幾次ñ,我也想知道是否使用GROUP_CONCAT將它們合併在一起是一個好主意。
我無法以這種方式連接這三個表來生成所需的查詢。我發現了一些靈感(在這裏有一位用戶提供),發現在http://sqlfiddle.com/#!2/baf8d,但是我很難定製這個以適應我自己的需要(在這個例子中,姓和名在每個父/表中,而我繼承這些字段來自Person超類。
下面的代碼是我在決定問這個問題之前得到的最接近的代碼,我認爲如果我可以將這些查詢合併在一起來匹配上面的結果,但我卡住了它...
mysql> select person.firstName as ParentFirstName, person.lastName as ParentLastName from person where
-> person.personID IN (select * from parent);
+-----------------+----------------+
| ParentFirstName | ParentLastName |
+-----------------+----------------+
| John | Doe |
| Jane | Doe |
| Peter | Smith |
| Mary | Mason |
+-----------------+----------------+
mysql> select person.firstName as ChildFirstName, person.lastName as ChildLastName from person where
-> person.personID IN (select player.playerID from player);
+----------------+---------------+
| ChildFirstName | ChildLastName |
+----------------+---------------+
| Maggie | Doe |
| Rob | Doe |
| Neil | Smith |
| Chad | Smith |
+----------------+---------------+
我覺得有我的數據庫架構中的人超是必要的(如播放器/父母和其他「人」的實體將有類似的細節)和它的東西,我寧願離開。如果你能夠幫助我解決這個問題,我將非常感激。
在此先感謝!
羅布有每個孩子的父親和母親,所以你怎麼能只需要一個父 – 2012-04-28 06:12:50
兩個親@ ShaikhFarooque通過查看錶格和視覺表示,是什麼讓你說我只帶一位家長? – Rob 2012-04-28 06:34:44
Rob將會有4列,FatherFirstName,FatherLastName,MotherFirstName,MotherLastName – 2012-04-28 06:48:49