这个问题是从我的@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