(MySQL) Zeichen bei Abfrage ersetzen
Ben
- datenbank
0 dedlfix0 Real_Thunder0 Ilja0 Ben
Hallo zusammen!
Besteht die Möglichkeit, bei einer SELECT-Abfrage in einer MySQL Datenbank den Abfragestring in Kleinbuchstaben auszugeben und einzelne Zeichen durch andere zu ersetzen?
Derzeit greift bei mir diesbezüglich noch PHP:
$name = str_replace(array(" ","ä","ö","ü","ß"),array("_","ae","oe","ue","ss"),strtolower($name));
Nun soll der Wert '$name' direkt in der Datenbank gefunden werden, was PHP hierfür leider nutzlos macht.
Besten Dank im Voraus,
Ben
echo $begrüßung;
Besteht die Möglichkeit, bei einer SELECT-Abfrage in einer MySQL Datenbank den Abfragestring in Kleinbuchstaben auszugeben und einzelne Zeichen durch andere zu ersetzen?
Aus deiner Anfrage kann ich nicht wirklich entnehmen, was du eigentlich vorhast. Es könnte gut sein, dass die Stringmanipulation in PHP besser aufgehoben ist. Und genausogut könnten Stringfunktionen in MySQL zum Ziel führen.
echo "$verabschiedung $name";
Ich denke mal ich könnte dir helfen, Allerdings habe ich die Frage nicht richtig verstenden
Was du genau machen möchtest.
wie soll den wert name in der datenbank gefunden werden ?
yo,
Nun soll der Wert '$name' direkt in der Datenbank gefunden werden, was PHP hierfür leider nutzlos macht.
die funktionen LOWER() und REPLACE() sollten dir helfen, wobei bei diesem Vorschlag REPLACE mehrfach verschachtelt werden müsste. vielleicht kennt da jemand eine elegantere lösung.
Ilja
Hallo!
Um es etwas deutlicher auszudrücken: Ich habe eine Datenbank, in der die Namen mehrerer Bands gespeichert sind. So werden z.B. "Die Ärzte" ausgelesen.
Für weitergehende Informationen auf einer anderen Seite meines Projektes wird der String umgeformt, sodass er problemlos in der Adressleiste übermittelt werden kann. Dank Kleinschreibung und der Erstzung einzelner Zeichen wird aus "Die Ärzte" somit "die-aerzte".
Auf der aufgerufenen Seite sollen nun wieder die jeweiligen Informationen aus der Datenbank ausgelesen werden, was eine rückgängige Umformung des übermittelten Strings nötig macht.
Selbstverständlich könnte ich auch nur die jeweilige ID übermitteln. Im Sinne von Suchmaschinenfreundlichkeit und einfacher Merkbarkeit möchte ich jedoch von dieser Lösung Abstand nehmen.
Ich werd mir nun mal das entsprechende Kapitel im MySQL Manual angucken.
Besten Dank nochmal,
Ben
echo $begrüßung;
Auf der aufgerufenen Seite sollen nun wieder die jeweiligen Informationen aus der Datenbank ausgelesen werden, was eine rückgängige Umformung des übermittelten Strings nötig macht.
In dem Fall plädiere ich auf eine Stringbehandlung in PHP, da du auch die Suchanfragen variieren solltest.
Ohne Ersetzung: WHERE name='value'
Mit Ersetzung: WHERE name='value' OR name='välüe' (naja, so ähnlich jedenfalls)
Selbstverständlich könnte ich auch nur die jeweilige ID übermitteln. Im Sinne von Suchmaschinenfreundlichkeit und einfacher Merkbarkeit möchte ich jedoch von dieser Lösung Abstand nehmen.
Wie kommt denn die Suchmaschine an die Daten/Links ran? Die haben im Allgemeinen nicht die Angewohnheit, (Such-)Formulare auszufüllen.
echo "$verabschiedung $name";
echo $begrüßung;
Hallo!
Selbstverständlich könnte ich auch nur die jeweilige ID übermitteln. Im Sinne von Suchmaschinenfreundlichkeit und einfacher Merkbarkeit möchte ich jedoch von dieser Lösung Abstand nehmen.
Wie kommt denn die Suchmaschine an die Daten/Links ran? Die haben im Allgemeinen nicht die Angewohnheit, (Such-)Formulare auszufüllen.
Es existiert eine Übersichtsseite, welche eine Auswahlliste enthält. Dort wird zu den einzelnen Bands verlinkt, also www.name.de/bands/die-aerzte/, www.name.de/bands/die-happy usw.
In diesem Sinne gibt es kein wirkliches Suchformular. Allerdings sollte ich bei wachsender Anzahl an Verlinkungen überlegen, dieses einzubauen.
In dem Fall plädiere ich auf eine Stringbehandlung in PHP, da du auch die Suchanfragen variieren solltest.
Ohne Ersetzung: WHERE name='value'
Mit Ersetzung: WHERE name='value' OR name='välüe' (naja, so ähnlich jedenfalls)
Die Namen sind vorgegeben, weshalb der oben genannte Abschnitt sicherlich eher zu einer Suchanfrage passt. Es sei denn, ich habe Dich falsch verstanden.
echo "$verabschiedung $name";
Ben
echo $begrüßung;
In dem Fall plädiere ich auf eine Stringbehandlung in PHP, da du auch die Suchanfragen variieren solltest.
Mit Ersetzung: WHERE name='value' OR name='välüe' (naja, so ähnlich jedenfalls)
Letzteres lässt sich auch als WHERE name IN (..., ...) etwas vereinfachen. Das Prinzip bleibt aber.
Die Namen sind vorgegeben, weshalb der oben genannte Abschnitt sicherlich eher zu einer Suchanfrage passt. Es sei denn, ich habe Dich falsch verstanden.
MySQL unterscheidet nicht zwischen Groß- und Kleinschreibung (es sei denn, du wünschst das explizit mit BINARY-Feldern oder diesem Schlüsselwort bei der Suche). Das Problem solltest du also erstmal nicht mehr haben. Bleibt noch die Rück-Umsetzung der Umlaute.
Ich würde nicht stur ae zu ä, ss zu ß usw. rückübersetzen, da sicher nicht auszuschließen ist, dass auch ae, ss, ... in den Daten enthalten sein können, sondern beide Varianten in der Suchabfrage einbauen. (Eigentlich sind es 2^n (n=Anzahl der ersetzbaren Zeichen(folgen)) Möglichkeiten, wenn du alle Kombination berücksichtigen willst.)
Der einfachste Kompromiss wäre das Einfügen von Jokerzeichen statt der zu ersetzenden Zeichen.
Zum Ermitteln aller Kombinationen fällt mir nur ein, das über eine rekursive Funktion zu lösen.
Diese Kombinationen sollten dann in der "Mit Ersetzung"-Variante von oben eingebunden werden.
Willst du wirklich diesen Aufwand treiben? Wenn ja, würde ich dir auch noch sagen, wie ich mir die Funktionsweise dieser Funktion vorstelle.
echo "$verabschiedung $name";
Also ich sehe darun nicht wirklich ein problem.... wenn du die umlaute über einen string übermitteln willst, dann werden sie doch html konfrm gemacht, und werden so auch als ü oder ä wieder ausgegeben...
andere möglichkeit ist den sring einfach vor der mysql abfrage wieder zurück umzuwandeln....
da gibtes noch eine menge mehr möglichkeiten.......
echo $begrüßung;
Also ich sehe darun nicht wirklich ein problem.... wenn du die umlaute über einen string übermitteln willst, dann werden sie doch html konfrm gemacht, und werden so auch als ü oder ä wieder ausgegeben...
Der OP möchte gern über eine URL übergebene Daten, die auch noch menschenlesbar sein sollen, in einer Datenbank suchen.
Also: "Die Ärzte" sollen in der URL beispielsweise als www.example.com/seite.php/die-aerzte dargestellt werden, um dann in einer DB, in der sie ja als "Die Ärzte" stehen, gefunden zu werden.
Sachen wie %XY oder Ä für die Umlaute sollen vermieden werden, da "die-%XYrzte" und "die-Ärzte" nicht mehr menschenlesbar ist.
Nun ist etwas gesucht, das bei gegebenem "die-aerzte" "Die Ärzte" findet, und möglichst auch nicht bei Wörtern wie "Michael" kapituliert.
andere möglichkeit ist den sring einfach vor der mysql abfrage wieder zurück umzuwandeln....
Ja, aber nur wenn man es zwar eindeutig, dafür aber nur maschinenlesbar, hinzu umwandelt. Ansonsten wird nicht "einfach" (meiner bescheidenen Meinung nach).
da gibtes noch eine menge mehr möglichkeiten.......
immer her damit
echo "$verabschiedung $name";
So dan machen wir es mal nicht so kompliziert...
einfache lösung ist es über den mysql string zu machen....
vorher aber noch mit php eine neue varibel erstellen, in der du wieder die ae's usw... in ä's usw...
Gebe dir mal einen kleinen denkanreiz...
der link ist ww.example.de/sete.php?band=die-aerzte
band2 = variabel zurückumwandn ;
SELECT felder FROM tabelle WHERE (band = '$band' or band = 'band2')
die klammer habe ich gemacht, weil du sicherlich noch mehre where klauseln drin hast........
so functioniert es....
ausser du hast einen michael und einen michäl in der datenbank...
das läßt sich dann aber nicht leicht verhindern.......
nur wenn man ein array mit bekannten ae erstellt.. und diese wörter den ausschließt aus der umwandlung..
ich hoffe dies wird dir helfen..
MfG Real_Thunder
Hi,
Für weitergehende Informationen auf einer anderen Seite meines Projektes wird der String umgeformt, sodass er problemlos in der Adressleiste übermittelt werden kann. Dank Kleinschreibung und der Erstzung einzelner Zeichen wird aus "Die Ärzte" somit "die-aerzte".
Auf der aufgerufenen Seite sollen nun wieder die jeweiligen Informationen aus der Datenbank ausgelesen werden, was eine rückgängige Umformung des übermittelten Strings nötig macht.
Das scheitert daran, daß diese Umwandlung nicht eindeutig rückgängig gemacht werden kann.
Zwar kann ein "ä" oder "ö" eindeutig in "ae" oder "oe" umgewandelt werden, aber nicht jede Zeichenfolge "ae" oder "oe" darf in ein "ä" oder "ö" umgesetzt werden (z.B. "Michaela" ==> "Michäla", "soeben" ==> "söben", "Waechter" ==> "Wächter"), noch häufiger tritt der Fall bei ü auf: "neuerdings" ==> "neürdings", "heuer" ==> "heür", "zuerst" ==> "zürst", "Steuer" ==> "Steür", ...
cu,
Andreas