PHP / SQL:3个表,一个具有一对一和一对多关系的桥表

时间:2018-11-27 18:56:22

标签: php sql join

我正在尝试将3个表连接在一起:一个Contacts表,一个Classes表和一个StudentInClasses桥接表,该表与Contacts具有一对一的关系,与Classs具有一对多的关系。

我想要的输出是这样:

  • 彼得
    • 数学101
    • 法语
    • 英语202
    • 物理
  • 汤姆·史密斯
    • 法语
    • 英语202
  • 保罗
    • 英语202
    • 物理
  • 哈里
    • 数学101
    • 物理

但是我得到了这个(我的var_dump可能有不同的信息):

  • 彼得
    • 数学101
  • 汤姆·史密斯
    • 法语
  • 保罗
    • 英语202
  • 哈里
    • 数学101

这是我的表格StudentsInClasses,Contacts,Classs(很抱歉,格式问题,我还不能上传图片)。

StudentsInClassID ContactID ClassID。

1 3 1
2 7 4
3 1 4
4 3 1
5 7 2
6 7 2
7 1 2
11 23 4
10 23 5

ContactID ContactName ContactEmail

1 Peter Homeatgoogledotca
3 Tom Tomhothotdotdotcom
7 Paul mehomedotcom
23哈里Harryhomedotcom

ClassID ClassName ClassRoom

1 Math-101 273
2 English-202 444
4法语111
5物理R444

我的SQL查询:

$getInfo = $conn->prepare("
        SELECT ClassName, ContactName FROM StudentsInClasses
        JOIN Contacts ON StudentsInClasses.ContactID = Contacts.ContactID
        JOIN Classes ON StudentsInClasses.ClassID = Classes.ClassID
        GROUP BY ContactName");
$getInfo->execute();
$getInfo = $getInfo->fetchAll();

我的var_dump产生了这种情况(您可以看到我与班级之间只有一对一的关系,我应该为每个联系人获得2-3个班级):

哈里

array(4) { ["ClassName"]=> string(6) "French" [0]=> string(6) "French" ["ContactName"]=> string(5) "Harry" [2]=> string(5) "Harry" }

保罗

array(4) { ["ClassName"]=> string(11) "English 202" [0]=> string(11) "English 202" ["ContactName"]=> string(9) "Paul" [2]=> string(9) "Paul" }

彼得

array(4) { ["ClassName"]=> string(11) "English 202" [0]=> string(11) "English 202" ["ContactName"]=> string(5) "Peter" [2]=> string(5) "Peter" }

汤姆·史密斯

array(4) { ["ClassName"]=> string(8) "Math 101" [0]=> string(8) "Math 101" ["ContactName"]=> string(9) "Tom Smith" [2]=> string(9) "Tom Smith" } 

每个人都应该上2-3堂课,但我只能上一堂课。 我一直在寻找S.O.和Google寻找解决方案,但我无济于事。

在此先感谢任何可以提供帮助的人! 8-)

0 个答案:

没有答案