Reputation: 231
I have the following query
$sql = 'SELECT F.ID, F.name as famName,F.contactEmail,F.address,F.phone,F.sitting,
M.date,M.time,M.meeting,
P.name as partName,P.email,
R.numAttendees,R.deltoken
FROM Registration R, meeting M,
Participants P,Family F
WHERE date = CURDATE() + INTERVAL 1 DAY
AND R.participant = P.ID
AND R.meeting= M.ID
AND M.family = F.ID
ORDER BY M.meeting';
$data = $pdo -> query($sql)->fetchAll(PDO::FETCH_GROUP);
which returns exactly what I need. However, I then need to use the same information grouped by email. Is there any way to do that, without requerying the database?
Upvotes: 0
Views: 121
Reputation: 11242
$grouped_by_email = array();
foreach($data as $row) {
if(!isset($grouped_by_email[$row['email']])) {
$grouped_by_email[$row['email']] = array();
}
$grouped_by_email[$row['email']][] = $row;
}
This will create an array of arrays with the email as the key.
If you want to do this similar to the way "GROUP BY" works in SQL, then use this:
$grouped_by_email = array();
foreach ($data as $row) {
if (!isset($grouped_by_email[$row['email']])) {
$grouped_by_email[$row['email']] = $row;
}
else {
$grouped_by_email[$row['email']] = aggregate($grouped_by_email[$row['email']], $row);
}
}
function aggregate($existingValue, $newValue)
{
// Here write the olumn you want to combine and how.
$newValue['numAttendees'] += $existingValue['numAttendees'];
return $newValue;
}
Upvotes: 3