Array aus Datenbankabfrage zusammenfassen uns sortieren
Hallo Liebe Administrator.de Community,
Ich stehe vor einem Problem das Array aus meiner Datenbankabfrage zusammenzufassen und sortiert ausgeben zu lassen.
Hier mal ein Bild der Datenbank:
Das Array das meine Datenbankabfrage zurück gibt sieht so aus:
Ich benötige jetzt ein array mit dem es mir möglich ist ein array zu erzeugen das so aussieht:
Bin schon seit tagen am testen und tüffteln habe jedeoch noch keine möglichkeit gefunden um dies zu bewerkstelligen.
Über jede Hilfe und jeden Tipp bin ich dankbar!
Ich stehe vor einem Problem das Array aus meiner Datenbankabfrage zusammenzufassen und sortiert ausgeben zu lassen.
Hier mal ein Bild der Datenbank:
Das Array das meine Datenbankabfrage zurück gibt sieht so aus:
Array
(
=> Array
(
[mitarbeiter] => Administrator
[cal_day] => 1
[ma_wish] => Dienst
[mid] => 1
)
[1] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 4
[ma_wish] => Frei
[mid] => 1
)
[2] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 6
[ma_wish] => Frei
[mid] => 1
)
[3] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 9
[ma_wish] => Dienst
[mid] => 1
)
[4] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 12
[ma_wish] => Dienst
[mid] => 1
)
[5] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 18
[ma_wish] => Frei
[mid] => 1
)
[6] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 22
[ma_wish] => Dienst
[mid] => 1
)
[7] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 24
[ma_wish] => Dienst
[mid] => 1
)
[8] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 27
[ma_wish] => Frei
[mid] => 1
)
[9] => Array
(
[mitarbeiter] => Administrator
[cal_day] => 30
[ma_wish] => Frei
[mid] => 1
)
[10] => Array
(
[mitarbeiter] => testuser
[cal_day] => 3
[ma_wish] => Dienst
[mid] => 2
)
)
Ich benötige jetzt ein array mit dem es mir möglich ist ein array zu erzeugen das so aussieht:
array(
[mid-des-users] => Array
(
[mitarbeiter] => name
[dienst] => die cal_day's wenn ma_wish = dienst)
[frei] => die cal_day's wenn ma_wish = frei)
[mid] => 2
)
)
Bin schon seit tagen am testen und tüffteln habe jedeoch noch keine möglichkeit gefunden um dies zu bewerkstelligen.
Über jede Hilfe und jeden Tipp bin ich dankbar!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 365744
Url: https://administrator.de/contentid/365744
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
warum erledigst du das nicht direkt mit der SQL-Abfrage, statt das nachträglich "umbiegen" zu wollen?
Stichwort Inner Join
Gruß
em-pie
warum erledigst du das nicht direkt mit der SQL-Abfrage, statt das nachträglich "umbiegen" zu wollen?
Stichwort Inner Join
select
tbl1.name, tbl1.cal_days as "dienst", tbl2.cal_days as "frei"
From
(select name, cal_year, cal_mon, Count(cal_days) as cal_days, 'dienst' as wish from table where ma_wish = "dienst" group by name, cal_year, cal_mon) as tbl1
Inner join
(select name, cal_year, cal_mon, Count(cal_days) as cal_days, 'frei' as wish from table where ma_wish = "frei" group by name, cal_year, cal_mon) as tbl2 on tbl1.name = tbl2.name
Gruß
em-pie
Erst mit array_unique alle Eindeutigen ma_wish Werte holen und dann in einer Schleife das Array erneut filtern mit array_filter
Beispiel:
Gruß Snap
Beispiel:
foreach(array_unique(array_column($array,'ma_wish')) as $cat){
echo "Category '$cat':<br />";
foreach($array as $user){
if($user['ma_wish'] == $cat){
echo $user['mitarbeiter'] . "<br />";
}
}
}
Was willst du denn mit implode inhaltlich bewerkstelligen (also was implode() macht, weiss ich)?
Willst du dann in Spalte "dienst" alle Tage aneinandergereiht haben, an denen der MA "Dienst" hat und in Spalte "frei" dann selbiges, nur für die avisierten freien Tage?
Quasi:
NAME | DIENST | FREI
Max Mustermann | 1,12,13,24,25,29 | 2,13,19,27,28
Gisela Mustermann | 2,13,14,26,27,28 | 1,10,19,25,30
Willst du dann in Spalte "dienst" alle Tage aneinandergereiht haben, an denen der MA "Dienst" hat und in Spalte "frei" dann selbiges, nur für die avisierten freien Tage?
Quasi:
NAME | DIENST | FREI
Max Mustermann | 1,12,13,24,25,29 | 2,13,19,27,28
Gisela Mustermann | 2,13,14,26,27,28 | 1,10,19,25,30
Dann beschäftige dich mal hiermit:
https://www.mssqltips.com/sqlservertip/2914/rolling-up-multiple-rows-int ...
http://carlosferreira.com/how-to-combine-values-from-multiple-rows-of-a ...
Stichwörter (für die Nachwelt hier):
scheint ja genau das zu sein, was du willst. Du musst dann vermutlich nur mit Gruppierungen "herumspielen"....
Du müsstenst dann nur mal nach der Syntax für MySQL suchen....
https://www.mssqltips.com/sqlservertip/2914/rolling-up-multiple-rows-int ...
http://carlosferreira.com/how-to-combine-values-from-multiple-rows-of-a ...
Stichwörter (für die Nachwelt hier):
- XML-Path
- STUFF
scheint ja genau das zu sein, was du willst. Du musst dann vermutlich nur mit Gruppierungen "herumspielen"....
Du müsstenst dann nur mal nach der Syntax für MySQL suchen....