Aiun Geschrieben 28. März 2006 Geschrieben 28. März 2006 hi, folgendes: in einem meiner Scripte entsteht halb-dynamisch ein SQL-Statement also select feld from table where ... bevor es jedoch an die Datenbank geht, muss das, was die Anwendung generiert gemappt werden. es kann z.B. sein, das da steht: select * from mitarbeiter where Name = 'Mustermann' dann muss es gemappt werden zu: select * from mitarbeiter where m_Nachname = 'Mustermann' ich habe dazu ein Mapping, z.b. als Array "Name" => "m_Nachname" ... etz. nun habe ich bisher ein einfaches Str_replace benutzt...problem: wenn ich: "Vorname" => "m_Vorname" "Name" => "m_Nachname" select * from mitarbeiter where Vorname = 'Mustermann' könnte theoretisch auch select * from mitarbeiter where m_Vorm_Nachname = 'Mustermann' rauskommen, da er das bereits ersetzte nochmal findet. ein split() geht nicht, da das where ja auch komplizierter sein kann, (a and or (c or d and e) irgend eine idee ? , ein regulärer ausdruck vielleicht ? danke
baba007 Geschrieben 28. März 2006 Geschrieben 28. März 2006 select * from mitarbeiter where Name = 'Mustermann' wie kann das passieren, wenn du das select * from mitarbeiter where m_Nachname = 'Mustermann' haben willst ? Kannst du mir bitte das erklären ?
.vash Geschrieben 28. März 2006 Geschrieben 28. März 2006 hm, regexp ist sicher sinnvoll, vor allem was machst Du wenn jemand mit Nachnamen "Kname" heißt? Andere Lösung wäre die Textstrings die Du ersetzen willst, immer in Sonderzeichen einzupacken wie z.B. %Name%
Aiun Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 baba, ich ersetzte die Feldnamen im String. vash....ja das wäre eine idee...mal grübeln
baba007 Geschrieben 28. März 2006 Geschrieben 28. März 2006 ja und ? ersetze doch was du willst, deine Vorgabe im Skript ist m_Nachname und fertig. wie kommt man da auf Name ? oder darf der benutzer selber eintragen wie die Spalten zu heissen haben in deiner DB ?
DevilDawn Geschrieben 28. März 2006 Geschrieben 28. März 2006 Ansonsten würde in PHP wohl sowas gehen... <? $Query = "SELECT * FROM table WHERE field1 = 4 AND field7 LIKE '%foo%'"; list($Select, $Where) = split("WHERE",$Query); $Pattern = "/(\w+)(\s*(=|LIKE)\s*)([^ ]+)/"; $Replace = "m_$1$2$4"; $NewWhere = preg_replace($Pattern, $Replace, $Where); echo $Select."WHERE".$NewWhere."\n"; ?> [/php] [code] > php5 -q regex.php SELECT * FROM table WHERE m_field1 = 4 AND m_field7 LIKE '%foo%' [/code] \w+ Muß natürlich für die Feldbezeichner angepasst werden. Ich gehe hier nur von Worten aus. Ich berücksichtige nur "=" und "LIKE" Operationen. Außerdem gehen nur gleichförmige Umwandlungen (FELDBEZEICHNER -> m_FELDBEZEICHNER), nicht mal so und mal anders.
Aiun Geschrieben 28. März 2006 Autor Geschrieben 28. März 2006 es geht um eine Anwendung die aus mehreren Schichten besteht. Der Programmierer der an der einen Schicht arbeitet (darstellungsschicht) hat keine Ahnung wie die Felder in der Datenbank heißen, er weis nur wie die Attribute im Entity-Relationship-Diagramm aussehen. Da es sein kann das mehrere Anwendungen auf die gleichen tabellen zugreifen, aber je nach Entwicklungsstand und anwendungsgebiet die Entitäten anders definiert haben, gibts da schonmal abweichungen. daher trifft auch nur "m_" nicht zu. Es gibt jeweils ein "code" => "Datenbank" für jedes Attribut.
DevilDawn Geschrieben 29. März 2006 Geschrieben 29. März 2006 Dafür wird es kein Regex geben. Die Interfaces zwischen den Programmierern der einzelnen Schichten hätten bereits vor dem Projekt geklärt werden müssen.
Aiun Geschrieben 29. März 2006 Autor Geschrieben 29. März 2006 ^^ es geht um eine ständige Weiterentwicklung, nicht um die Verwendung in einem speziellen Projekt. Ich habe schon zuvor mal ein ähnliches Regexp für ein Template-System gesehen, das werde ich mir wohl nochmal ansehen.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden