Aiun Geschrieben 28. März 2006 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 28. März 2006 Teilen 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 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
.vash Geschrieben 28. März 2006 Teilen 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% Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 28. März 2006 Autor Teilen Geschrieben 28. März 2006 baba, ich ersetzte die Feldnamen im String. vash....ja das wäre eine idee...mal grübeln Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 28. März 2006 Teilen 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 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 28. März 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 28. März 2006 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevilDawn Geschrieben 29. März 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aiun Geschrieben 29. März 2006 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.