Veröffentlicht 27. September 200222 j Hallo, ich möchte gerne eine MySQL Abfrage schreiben, die mir z. B. WHERE muster LIKE "%test123%, alle Datensätze liefert, in denen test vorkommt ohne 123. Wie muss ich das eingeben? Frank
27. September 200222 j versuchs mal damit where muster regexp 'test'; das findet soweit ich weiss jedes vorkommen von "test" egal ob in einem wort oder groß oder klein. soll exakt das vorkommen von z.B. "TeSt" gefunden werden gehts so: where muster regexp binary 'test';
28. September 200222 j Autor Hallo, das sieht nicht schlecht aus. Kann ich aber irgendwie abfragen, ob das Wort z. B. test139 irgendwie in der Datenbank vorkommt? z. B. test, st139, 139 usw. Frank
28. September 200222 j sorry, hatte dich glaube ich eh falsch verstanden. was willst du denn nun genau. also wenn du nach "test" suchst, was soll dann gefunden werden? nur das alleinstehende wort "test", oder auch z.b. "testbogen", "testverfahren", "test123"? oder alles genannte bis auf "test" gefolgt von irgendwelchen zahlen? vielleicht hilft ja auch die instr funktion? where instr(muster, 'test');
28. September 200222 j Autor Hallo, das hilft mir auch nicht so richtig weiter. Folgender Hintergrund. Ich programmiere gerade ein kleines Forum für unser Intranet und ich kann Loginnamen sperren. Z. B. den Loginnamen test. Wenn jetzt aber jemand bei der Registrierung test123 eingibt, dann wird meine bisherige SQL Abfrage keine Treffer liefern und den Loginnamen annehmen. Das möchte ich natürlich verhindern. Jetzt möchte ich gernen eine SQL Abfrage haben, die alle möglichen Kombinationen aus test123 in der Datenbank überprüft und dann sagt das der Loginname gesperrt ist. Frank
28. September 200222 j Öh.. wenn ich Dich richtig verstanden hab, brauchst Du doch nur "where muster like '%text%'", oder?
28. September 200222 j Autor Im Prinzip schon, nur bei mir sieht die SQL Abfrage so aus. WHERE loginname LIKE "%test123%" Und der liefert mir dann nicht den Eintrag test. Und das will ich ja erreichen. Frank
28. September 200222 j Schomal mit '*test*' versucht? Also ich kenn leider nur Access, aber dort wäre es genau das was du suchst denke ich. So long David
28. September 200222 j Autor Wir reden an einander vorbei. Das test123 gibt ein Benutzer ein. Ich will jetzt die Benutzereingabe test123 in der Datenbank überprüfen. Frank
28. September 200222 j kapiere langsam überhaupt nix mehr. like '%test%' schmeißt doch dann genau das raus was du willst oder? like 't%' liefert dir dann alle die mit t anfangen.
28. September 200222 j Original geschrieben von palvoelgyi Wir reden an einander vorbei. Das test123 gibt ein Benutzer ein. Ich will jetzt die Benutzereingabe test123 in der Datenbank überprüfen. Frank worauf denn?
28. September 200222 j Autor Ich erklär es nochmal. Ich programmiere gerade ein Forum. Dort können sich leute anmelden. Jetzt habe ich eine Tabelle wo Benutzernamen drin stehen, die nicht verwendet werden dürfen. Dort steht z. B. test drin. Wenn jetzt ein Benutzer z.B. test123 als Benutzername eingibt. Dann soll das Skript in der Tabelle überprüfen ob der Benutzername geperrt ist. Wenn ich jetzt WHERE name LIKE "test123" mache, dann erhalte ich 0 Ergebnisse, da nur der Benutzername test gesperrt ist. Ich möchte jetzt aber alle Benutzernamen die irgendwie das Wort test drin haben sperren. Wie muss ich jetzt eine SQL Abfrage schreiben, die mir zu test123 sagt, das der gesperrt ist, weil test in der Tabelle steht. Ich hoffe Ihr habt es jetzt verstanden. Frank
28. September 200222 j Nu hab ich's verstanden - Art aber noch nicht. Tjo, mir fällt nur leider grad auch nix besseres ein, außer alle gesperrten Namen aus der DB zu holen und dann zu vergleichen.
28. September 200222 j Ab Version 3.23.23 bietet mySQL auch die Möglichkeit einer Volltextsuche, damit müßte das machbar sein: http://www.mysql.de/documentation/mysql/bychapter/manual.de_Reference.html#Fulltext_Search
28. September 200222 j Hallo, mit der Volltextsuche wirst du da auch nicht weiterkommen, da da nur nach ganzen Worten gesucht werden kann. Ohne Programmierlogik wird das imho nicht gehen. Also alle gesperrten Worte aus der Datenbank holen und mit PHP dann die Worte in den Usernamen suchen. Gruß Jaraz
28. September 200222 j Original geschrieben von Jaraz mit der Volltextsuche wirst du da auch nicht weiterkommen, da da nur nach ganzen Worten gesucht werden kann. Bist du sicher? Nach dem ersten Beispiel in dem Link oben, sieht es so aus, als ob auch Teilworte gefunden werden (hab es aber selber noch nicht ausprobiert).
28. September 200222 j Original geschrieben von Wolle Bist du sicher? Nach dem ersten Beispiel in dem Link oben, sieht es so aus, als ob auch Teilworte gefunden werden (hab es aber selber noch nicht ausprobiert). Ja, bin ich. Näheres ist unter anderem auch hier zu lesen: http://www.dclp-faq.de/q/q-mysql-volltextsuche.html Das erste Beispiel hat nichts mit der Volltextsuche von Mysql zu tun. Man kann natürlich das erste Beispiel erweitern. Als erstes werden alle verbotenen Wörter ausgelesen und dann wird das SQL Statement zusammengebaut. Da ein SQL Statement aber nicht unendlich lang sein darf, ist irgendwann eine maximale Anzahl an verbotenen Wörtern erreicht. Beispiel: select name from site where name regexp 'foo' or name regexp 'bar'; Vielleicht geht es auch noch kürzer. Gruß Jaraz
29. September 200222 j Original geschrieben von palvoelgyi Wenn jetzt ein Benutzer z.B. test123 als Benutzername eingibt. Dann soll das Skript in der Tabelle überprüfen ob der Benutzername geperrt ist. Wenn ich jetzt WHERE name LIKE "test123" mache, dann erhalte ich 0 Ergebnisse, da nur der Benutzername test gesperrt ist. Ich möchte jetzt aber alle Benutzernamen die irgendwie das Wort test drin haben sperren. SELECT Word FROM Badwordtable WHERE POSITION (Badwordtable.Word IN Loginwunsch) > 0; Wenn dieser Query >= 1 Row zurückliefert enthält der Wunsch-Login ein böses Wort. Ausserdem gibt der Query alle bösen Worte aus, die du dem User an den Kopf werfen kannst. Wo ist das Problem? Getestet auf mysql 3.22.30 Ich hoffe ich hab die Aufgabenstellung korrekt verstanden =)
29. September 200222 j Das klappt ja tatsächlich. Wieder was gelernt. Es geht übrigens auch: SELECT Word FROM Badwordtable WHERE LOCATE(Badwordtable.Word, login) > 0; Ich glaube ich sollte mir mal die ganzen Funktionen, die Mysql bietet, anschauen. Gruß Jaraz
29. September 200222 j Autor Das klappt tatsächlich. Genau das habe ich gesucht. Danke euch allen. Frank
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.