从3个表中获取数据并显示mysql php

时间:2019-01-25 01:50:06

标签: php mysql

我在同一个mysql数据库中有3个表

email

id      |   emailAddresses
--------+--------------
91      |    Cras@Cumsociisnatoque.net
92      |    ante.dictum.mi@sollicitudinadipiscingligula.co.uk
93      |    Nunc.sed@pretiumet.ca
94      |    Nunc.mauris@lacusQuisque.org"
95      |    ccumsan.interdum@tellus.ca
96      |    isl@Sedpharetrafelis.com
97      |    u.accumsan.sed@Nuncsollicitudin.net
98      |    at@eleifendvitaeerat.co.uk
99      |    pede.ac.urna@pharetraQuisque.co.uk
100     |    ccumsan.laoreet.ipsum@arcueu.co.uk


groups

id      |   groupName 
--------+----------
10      |    Group1
11      |    Group2    
12      |    Group3    
13      |    Group4


emailGroupsMatches

id      |   emailGroup_id   |   email_id     
--------+-------------------|------------
400     |    10             |      91     
411     |    11             |      91
412     |    12             |      93
413     |    13             |      94
414     |    10             |      95
415     |    10             |      96

我正在尝试提取组名,然后检查与该组关联的所有电子邮件并将其显示在组标题下。

Group1:    
Cras@Cumsociisnatoque.net     
ccumsan.interdum@tellus.ca   
isl@Sedpharetrafelis.com 

Group2:    
Cras@Cumsociisnatoque.net 

Group3:
Nunc.sed@pretiumet.ca 

Group4:
Nunc.mauris@lacusQuisque.org

我认为我可能对此考虑过多,或者可能是我不熟悉的事情。我曾尝试加入表,但我可能做错了。任何方向的帮助将不胜感激。

谢谢

更新__________

我尝试获取两个数组,然后尝试加入它们。它接近了,但我一直遇到问题。

        $emailArray1[] = '';
        $emailArray2[] = '';
         $stmt1 = $this->db->query("SELECT emailGroupsMatches.emailGroup_id, emailGroupsMatches.email_id, emailGroups.groupName FROM emailGroups,emailGroupsMatches WHERE emailGroupsMatches.emailGroup_id = emailGroups.id");
        while ($row1 = $stmt1->fetch()) {
            $emailArray1[] = $row1;


            $emailGroup_id[] = $row1['emailGroup_id'];
            $email_id[] = $row1['email_id'];
            $groupName[] = $row1['groupName'];

            $data1[] = array(
            "emailGroup_id" => $emailGroup_id,
            "email_id" => $email_id,
            "groupName" => $groupName
            );
            echo '<pre>';
            print_r($data1);

        }
        $stmt2 = $this->db->query("SELECT * FROM email,emailGroupsMatches WHERE emailGroupsMatches.email_id = email.id");
        while ($row2 = $stmt2->fetch()) {
            $emailArray2[] = $row2;


            $emailGroup_id2[] = $row2['emailGroup_id'];
            $emailAddresses[] = $row2['emailAddresses'];

            $data2[] = array(
            "emailGroup_id" => $emailGroup_id2,
            "emailAddresses" => $emailAddresses
            );

            //echo '<pre>';
            //print_r($data2);


        }

        //$c = array_combine($emailArray1, $emailArray2);

        //print_r($c);


        $result = array();

            foreach ($data1 as $value) {
                // do not handle elements without pageclass
                if (!array_key_exists('emailGroup_id', $value) || !$value['emailGroup_id']) {
                    continue;
                }
                $result[$value['emailGroup_id']] = $value;
            }
            foreach ($data2 as $value) {
                if (
                    // do not handle elements without pageclass         
                    !array_key_exists('emailGroup_id', $value) || !$value['emailGroup_id'] ||
                    // do not handle elements that do not exist in array 1
                    !array_key_exists($value['emailGroup_id'], $result)
                    ) {
                    continue;
                }
                // merge values of this pageclass
                $result[$value['emailGroup_id']] = array_merge($result[$value['emailGroup_id']], $value);
            }
            echo '<pre>';
            print_r($result);

返回

Array

(     [0] =>数组         (             [emailGroup_id] =>数组                 (                     [0] => 11                 )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
            )

    )

[1] => Array
    (
        [emailGroup_id] => Array
            (
                [0] => 11
                [1] => 11
            )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
                [1] => cyeyeyddbd@gmadbdbxbil.com
            )

    )

[2] => Array
    (
        [emailGroup_id] => Array
            (
                [0] => 11
                [1] => 11
                [2] => 12
            )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
                [1] => cyeyeyddbd@gmadbdbxbil.com
                [2] => luctus.et.ultrices@Vivamus.net
            )

    )

[3] => Array
    (
        [emailGroup_id] => Array
            (
                [0] => 11
                [1] => 11
                [2] => 12
                [3] => 12
            )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
                [1] => cyeyeyddbd@gmadbdbxbil.com
                [2] => luctus.et.ultrices@Vivamus.net
                [3] => quis@fringillaporttitor.co.uk
            )

    )

[4] => Array
    (
        [emailGroup_id] => Array
            (
                [0] => 11
                [1] => 11
                [2] => 12
                [3] => 12
                [4] => 10
            )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
                [1] => cyeyeyddbd@gmadbdbxbil.com
                [2] => luctus.et.ultrices@Vivamus.net
                [3] => quis@fringillaporttitor.co.uk
                [4] => arcu.Sed.eu@accumsan.org
            )

    )

[5] => Array
    (
        [emailGroup_id] => Array
            (
                [0] => 11
                [1] => 11
                [2] => 12
                [3] => 12
                [4] => 10
                [5] => 10
            )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
                [1] => cyeyeyddbd@gmadbdbxbil.com
                [2] => luctus.et.ultrices@Vivamus.net
                [3] => quis@fringillaporttitor.co.uk
                [4] => arcu.Sed.eu@accumsan.org
                [5] => Ut@luctuslobortisClass.com
            )

    )

[6] => Array
    (
        [emailGroup_id] => Array
            (
                [0] => 11
                [1] => 11
                [2] => 12
                [3] => 12
                [4] => 10
                [5] => 10
                [6] => 13
            )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
                [1] => cyeyeyddbd@gmadbdbxbil.com
                [2] => luctus.et.ultrices@Vivamus.net
                [3] => quis@fringillaporttitor.co.uk
                [4] => arcu.Sed.eu@accumsan.org
                [5] => Ut@luctuslobortisClass.com
                [6] => aliquet@ProindolorNulla.co.uk
            )

    )

[7] => Array
    (
        [emailGroup_id] => Array
            (
                [0] => 11
                [1] => 11
                [2] => 12
                [3] => 12
                [4] => 10
                [5] => 10
                [6] => 13
                [7] => 13
            )

        [emailAddresses] => Array
            (
                [0] => xdbxxvfshddghd@llsfg.com
                [1] => cyeyeyddbd@gmadbdbxbil.com
                [2] => luctus.et.ultrices@Vivamus.net
                [3] => quis@fringillaporttitor.co.uk
                [4] => arcu.Sed.eu@accumsan.org
                [5] => Ut@luctuslobortisClass.com
                [6] => aliquet@ProindolorNulla.co.uk
                [7] => hendrerit.a.arcu@sedlibero.com
            )

    )

1 个答案:

答案 0 :(得分:1)

以下查询将返回groupName并以逗号分隔的关联emailAddresses列表。因此,您可以显示组名并显示关联的电子邮件,只需循环emailAddresses列表即可。希望这会对您有所帮助!

SELECT groups.groupName as groupName, GROUP_CONCAT(email.emailAddresses) as emails 
FROM email 
INNER JOIN emailGroupsMatchesON emailGroupsMatches.email_id = email.id 
INNER JOIN groups ON emailGroupsMatches.emailGroup_id = groups.id 
GROUP BY groups.id