Hilfe bei Pattern-Syntax in preg_replace

pnx

Mitglied
Nabend beisammen,

hab jetzt schon einiges ausprobiert und auch auf php.net mir die Hilfestellung durchgeschaut, allerdings komm ich auf keinen grünen Zweig.

Es liegt ein String in folgender Form in einer DB:

1169136000_name1_status1_zusatz1./1169136000_name2_status2_zusatz2./1169136000_name3_status3_zusatz3./

name, status und zusatz stellen hier jetzt nur Platzhalter da, in der DB sind dort dann konkrete Infos, wie eben der Name.

Es soll nun zum Beispiel "1169136000_name1_status1_zusatz1./" isoliert werden, außerdem soll der Zahlenwert (ein Timestamp) sowie der status geändert werden.

Kann mir hierfür wer das Suchmuster und Ersatzmuster zeigen? Alternativ reicht auch das Suchmuster ... dann ersetze ich den Eintrag durch "nichts" und füge den veränderten Datensatz ans Ende des Strings an.

MfG,
pnx
 
Hallo!

Verstehe ich Dich richtig?
Du hast den Timestamp, den Namen, den Status und den Zusatz in einem Feld stehen?
Du nutzt eine Datenbank wie z.b. MySQL?
Dann solltest Du mal unbedingt über eine Reorganisation Deiner Datenbankstruktur nachdenken.
Denn so verschenkst Du die Möglichkeiten der Datenbank und machst Dir damit das Leben nur unnötig schwer.

Gruss Dr Dau
 
Ich würde dir wohl recht geben, wenn ich nur ein solches Feld habe. Die Tabelle besteht aus 6 Spalten mit allgemeinen Informationen, dazu kommen dann 9 Spalten, in denen ein String mit besagter Form liegt. Der Spaltennamen dieser 9 Felder sind vereinfacht gesagt verschiedene Orte.
Wenn ich jetzt die vier Infos pro Nutzer aufteilen wollte, hätte ich schonmal anstatt 9 Spalten 36 Spalten ... dazu kommt dann noch, dass ich in den einzelnen Felder, dann sowas stehen habe wie "name1,name2,name3" , "status1,status2,status3" usw. ... das würde mir die Organisation der Daten noch mehr erschweren als jetzt.

Wenn ich dann noch für jeden "name" eine einzelnen Zeile einführe, dann wird das was ich momentan in einer Zeile und 15 Feldern verstaue auf rund 8 bis 10 Zeilen und 42 Felder ausgeweitet, von denen dann auch noch viele leer stehen können (,da die Anzahl der Einträge in den Orten kann stark schwanken).

Als Lösung in einer Tabelle gefällt mir daher mein System schon ganz gut. Einzige echte Alternative wäre eine Splitung auf 2 Tabellen, wovon ich bisher aber auch nocht nicht überzeugt war. Eine Bearbeitung der Daten über preg_replace() ist vergleichsweise recht einfach, und da ich sicher sein kann, dass wohl nie mehr als 10 Informationssätze pro Ort vorhanden sind, befürchte ich auch nicht mit dieser Vorgehensweise php oder mysql an seine Grenzen zu bringen.
 
Zuletzt bearbeitet:
Hallo,

ich muss Dr Dau vollkommen Recht geben. Mit einem normalisierten Schema wirst du auf Dauer glücklicher werden.

Wenn ich dann noch für jeden "name" eine einzelnen Zeile einführe, dann wird das was ich momentan in einer Zeile und 15 Feldern verstaue auf rund 8 bis 10 Zeilen und 42 Felder ausgeweitet, von denen dann auch noch viele leer stehen können (,da die Anzahl der Einträge in den Orten kann stark schwanken).
Das ist eine Milchmädchenrechnung. Die Anzahl der Spalten- und Zeilenanzahl sagt zunächst nichts über die Güte eines Datenbankschemas aus.

Ohne die Beschaffenheit deiner Daten genauer zu kennen, würde man hier wohl eine Tabelle für die sechs allgemeinen Informationen erstellen und eine damit über den Primärschlüssel verknüpfte Tabelle, die die jeweiligen 4-Tupel enthält.

Ich verstehe nicht ganz, warum die eine Lösung mit händischer Serialisierung/-Deserialisierung vorziehst. Während man bei einer normalisieren Datenbank die von dir gewünschte Abfrage komplett der Datenbank überlassen kann, müsste man bei deiner Methode zuerst den Wert aus der Datenbank holen, ihn entsprechend zerlegen, die gewünschten Änderungen durchführen, den Wert wieder zusammensetzen und ihn in die Datenbank zurückschreiben. Wahrscheinlich müsste man dazu dann auch noch mit Transaktionen arbeiten, damit keine Anomalien auftreten.

Grüße,
Matthias
 
Zurück