Reputation: 71
I have 3 tables in the same mysql db
email
id | emailAddresses
--------+--------------
91 | [email protected]
92 | [email protected]
93 | [email protected]
94 | [email protected]"
95 | [email protected]
96 | [email protected]
97 | [email protected]
98 | [email protected]
99 | [email protected]
100 | [email protected]
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
I am trying to pull the group names and then check for all emails associated with that group and display them under the group heading.
Group1:
[email protected]
[email protected]
[email protected]
Group2:
[email protected]
Group3:
[email protected]
Group4:
[email protected]
I think i may be overthinking this or it may be something i'm unfamiliar with. I have tried Joining tables but i may have done it wrong. Any help in a direction would be appreciated.
Thanks
UPDATE__________
I have tried getting two arrays and then trying to join them. Its close but i keep having an issue.
$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);
returns
Array
( [0] => Array ( [emailGroup_id] => Array ( [0] => 11 )
[emailAddresses] => Array
(
[0] => [email protected]
)
)
[1] => Array
(
[emailGroup_id] => Array
(
[0] => 11
[1] => 11
)
[emailAddresses] => Array
(
[0] => [email protected]
[1] => [email protected]
)
)
[2] => Array
(
[emailGroup_id] => Array
(
[0] => 11
[1] => 11
[2] => 12
)
[emailAddresses] => Array
(
[0] => [email protected]
[1] => [email protected]
[2] => [email protected]
)
)
[3] => Array
(
[emailGroup_id] => Array
(
[0] => 11
[1] => 11
[2] => 12
[3] => 12
)
[emailAddresses] => Array
(
[0] => [email protected]
[1] => [email protected]
[2] => [email protected]
[3] => [email protected]
)
)
[4] => Array
(
[emailGroup_id] => Array
(
[0] => 11
[1] => 11
[2] => 12
[3] => 12
[4] => 10
)
[emailAddresses] => Array
(
[0] => [email protected]
[1] => [email protected]
[2] => [email protected]
[3] => [email protected]
[4] => [email protected]
)
)
[5] => Array
(
[emailGroup_id] => Array
(
[0] => 11
[1] => 11
[2] => 12
[3] => 12
[4] => 10
[5] => 10
)
[emailAddresses] => Array
(
[0] => [email protected]
[1] => [email protected]
[2] => [email protected]
[3] => [email protected]
[4] => [email protected]
[5] => [email protected]
)
)
[6] => Array
(
[emailGroup_id] => Array
(
[0] => 11
[1] => 11
[2] => 12
[3] => 12
[4] => 10
[5] => 10
[6] => 13
)
[emailAddresses] => Array
(
[0] => [email protected]
[1] => [email protected]
[2] => [email protected]
[3] => [email protected]
[4] => [email protected]
[5] => [email protected]
[6] => [email protected]
)
)
[7] => Array
(
[emailGroup_id] => Array
(
[0] => 11
[1] => 11
[2] => 12
[3] => 12
[4] => 10
[5] => 10
[6] => 13
[7] => 13
)
[emailAddresses] => Array
(
[0] => [email protected]
[1] => [email protected]
[2] => [email protected]
[3] => [email protected]
[4] => [email protected]
[5] => [email protected]
[6] => [email protected]
[7] => [email protected]
)
)
)
Upvotes: 1
Views: 56
Reputation: 557
Below query will return you the groupName
and comma separated list of associated emailAddresses
. So you can display group name and to display associated email just loop the emailAddresses list. Hope this will help you!
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
Upvotes: 1