[PHP & MySQL] Mehrere Datumangaben aus einem Textfeld auslesen

Habs derweilen soweit, dass er zumindest schon mal ein Ergebnis hat, das kein Error ist :)

PHP:
	$query4 = "SELECT * from freiwilligev2 WHERE `notizen` LIKE '%Vermittelt: 20%'";
	$result4 = $mysqli->query($query4);
	$myarray4 = array();
	while ($zeile4 = $result4->fetch_array()) {
	
	$subject4 = $zeile4['notizen'];
	$pattern4 = '/([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2})/';
	$result42 = preg_match_all($pattern4, $subject4, $subpattern4);
		
		foreach ($subpattern4[0] as $index => $iwerdkirre)
		{
		
		$date4 = strtotime($iwerdkirre);
		$mydate4 = strftime("%m.%Y", $date4);
		$myarray4[$zeile4['id']] = $mydate4;
		}

	}
...

Nur so hat er nur das letzte der inzwischen 4 Datum Angaben in der Tabelle drin. Was habe ich übersehen oder besser gesagt, was mach ich falsch?
 
Es kann doch ned mehr so viel sein, ich stehe sicher wieder nur auf dem Schlauch. Wenn ich in einen ECHO die Variable $iwerdkirre ausgebe habe ich alle 4 Datum schön angezeigt wie es soll. Nur wieso fallen die ersten 3 davon untern Tisch sobald der darauf folgende Code die Datum Angaben verarbeiten soll?

Ich hab jetzt das ganze Wochenende dran gesessen. Komme einfach ned dahinter wo der Fehler liegt.

Wer nen Geistesblitz?
 
Du setzt die Variable date4 ja auch bei jedem Schleifendurchlauf neu und überschreibst dabei das vorherige Ergebnis.

Wie willst du denn mit dem Ergebnis weiter arbeiten?

Wenn es in eine Datenbank soll, dann einfach direkt in der foreach Schleife in die DB schreiben oder erstaml in einem Array zwischenlagern und später weiter verarbeiten.
 
Die Daten sind bereits in einer Datenbank gespeichert.
Diese sollen eben abgerufen werden und dann in eine Tabelle gelistet werden. Eigentlich was ganz banales.

Weiter oben habe ich das genauer erklärt. mit den kompletten Code.

Das Aktuelle Ergebnis sind 4 Datum Angaben, die dann weiter benutzt werden als ob die einzeln in der Datenbank stehen würden. Um dann in der besagten Tabelle (ne Statistik) dargestellt wird und eben bei gleichen Monaten nen Zähler hoch Zählt.

Wennst magst kann ich dazu nen Sceenshot zeigen wie es ausschauen wird.
 
Das klingt nach einem Fail im Layout der Datenbank. Ich mein du kannst natürlich eine PHP Logik bauen die dir anhand des Monats den ganzen kram aggregiert aber genau dafür hat man ja eigentlich eine relationale Datenbank.

Wenn ich das richtig mitbekommen habe, kommen diese Daten die in der Tabelle stehen ja aus einer Benutzereingabe aus einem Notizfeld. Dann speicher die Daten doch gleich sauber, wenn du das Notizfeld in die Datenbank schreibst. Dann kannst du an der stelle wo du es brauchst dir das einfach von der Datenbank zusammen rechnen lassen und hast deine fertigen Daten für deine Statistik.

Spotan sehe ich da mindestens zwei Tabellen in deiner Datenbank, die ich anlegen würde:
1.: Personen (personen_id, name, ....)
2.: Vermittlungen (vermittlungs_id,personen_id,datum,vermittelt_an)

Das macht den Spaß mit dem Auslesen deutlich einfacher.
Code:
SELECT name, monat, count(*) FROM (
   SELECT p.personen_id, p.name, YEAR(datum) as monat
       FROM Vermittlung as v
       JOIN Personen as p on v.personen_id = p.personen_id
   ) as tb1
GROUP BY personen_id, monat
würde dir dann fertig die Daten geben, welche Person in welchem Monat wie viele Vermittlungen hatte. Zusätzlich ist es noch relativ erweiterbar

Um deine Lösung nicht komplett zu verwerfen, hier ein Ansatz, wie du die Daten in ein Array schreibst, um sie hinterher per PHP zu aggregieren:
PHP:
$query4 = "SELECT * from freiwilligev2 WHERE `notizen` LIKE '%Vermittelt: 20%'";
    $result4 = $mysqli->query($query4);
    $myarray4 = array();
    while ($zeile4 = $result4->fetch_array()) {
    
    $subject4 = $zeile4['notizen'];
    $pattern4 = '/([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2})/';
    $result42 = preg_match_all($pattern4, $subject4, $subpattern4);
    $datumArray = array();    
        foreach ($subpattern4[0] as $index => $iwerdkirre)
        {
        
        $datumArray[] = strtotime($iwerdkirre);
        $mydate4 = strftime("%m.%Y", $date4);
        $myarray4[$zeile4['id']] = $mydate4;
        }

    }
Danach stehen dir dann in dem Array $datumArray die einezelnen Daten zur Verfügung um sie später zu verarbeiten.
 
Zuletzt bearbeitet:
Hm.
Also kann ich das so ned machen wie ich vor hatte? Das währe auch zu einfach gewesen :)
Werde dann wohl Datenbank umbauen dürfen. Davor wollte ich mich drücken :)

Jedenfalls danke an alle für die Hilfe.
 
Doch noch mal ne Frage. Vielleicht geh ich schlicht zu kompliziert an die Sache ran (ja ich will mit aller Macht mich vor den DB Umbau drücken :D).

Die Vermittelten Personen und die Organisationen sind ja egal. Es geht nur um das Notizfeld bei den Personen und den Datum Angaben darin.

Also quasi nur ein einziges Datenbank Feld.

Das auslesen der Datum Angaben geht ja, da ich mit "echo "$iwerdkirre <br>"; alle Datum Angaben sehe.

Und die darzustellende Tabelle auf der Statistik Seite soll nur das Datum anzeigen (gekürzt auf Monat und Jahr) und in der Zelle nebendran dann für den Monat ein Zähler erhöhen, dass wenn ein Monat bei mehr Personen vor kommt eben der Zähler immer eins höher tickt.

Mehr ist das nicht.
 
Zwei möglichkeiten:
Möchtest du dich im Bereich Webentwicklung weiter entwickeln? Dann brauchst du in Zukunft sauberes Datenbankdesign, sonst wirst du nicht glücklich.

Möchtest du nur dieses eine Skript haben, dann mach dir kurz Gedanken wie du das lösen könntest oder such dir jemand, der dir das komplett baut.
Als Ansatz, wenn es denn unbedingt so sein soll, würde ich ein Array anlegen:
$stat[<vermittler>][<jahr>][<monat>] = <anzahl>

Aus deinem Timestamp bekommst du mit
date("Y", <timestamp>); deinen Timestamp
und mit
date("m",<timestamp>); den Monat

In der foreach dann jeweils den entsprechenden Zähler hochzählen und du hast es
 
Normal ist das ne einmalige Sache, aber hab das jetzt bisschen umgebaut, so dass eben jede Zusatzvermittlung ein eigenes Feld im Formular und in der Datenbank hat. Das in der Statistik jede Kategorie gesondert aufgeführt wird. Da Chef meint das mehr wie 5 Vermittlungen unrealistisch sind. Daher 5 Zusatzfelder und in der Statistik ne Tabelle für je vermittlung 2 3 4 und 5.

Ist zwar ned sonderlich kreativ, aber es erfüllt seinen zweck.

Vermute nur, dass noch eine Tabelle her muß, das alles dann zusammen rechnet, aber das bekomm ich sicher wie hin :)

Erst mal Pause und dann ins Wochenende :)

Danke an alle die mit geholfen haben.
 
Zurück