robotto7831a Geschrieben 27. September 2002 Geschrieben 27. September 2002 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 Zitieren
Art Geschrieben 27. September 2002 Geschrieben 27. September 2002 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'; Zitieren
robotto7831a Geschrieben 28. September 2002 Autor Geschrieben 28. September 2002 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 Zitieren
Art Geschrieben 28. September 2002 Geschrieben 28. September 2002 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'); Zitieren
robotto7831a Geschrieben 28. September 2002 Autor Geschrieben 28. September 2002 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 Zitieren
Chaosmaker Geschrieben 28. September 2002 Geschrieben 28. September 2002 Öh.. wenn ich Dich richtig verstanden hab, brauchst Du doch nur "where muster like '%text%'", oder? Zitieren
robotto7831a Geschrieben 28. September 2002 Autor Geschrieben 28. September 2002 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 Zitieren
David G. Geschrieben 28. September 2002 Geschrieben 28. September 2002 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 Zitieren
robotto7831a Geschrieben 28. September 2002 Autor Geschrieben 28. September 2002 Wir reden an einander vorbei. Das test123 gibt ein Benutzer ein. Ich will jetzt die Benutzereingabe test123 in der Datenbank überprüfen. Frank Zitieren
Art Geschrieben 28. September 2002 Geschrieben 28. September 2002 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. Zitieren
Art Geschrieben 28. September 2002 Geschrieben 28. September 2002 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? Zitieren
robotto7831a Geschrieben 28. September 2002 Autor Geschrieben 28. September 2002 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 Zitieren
Art Geschrieben 28. September 2002 Geschrieben 28. September 2002 like '%test%' funzt da doch prima. Zitieren
Chaosmaker Geschrieben 28. September 2002 Geschrieben 28. September 2002 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. Zitieren
Wolle Geschrieben 28. September 2002 Geschrieben 28. September 2002 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 Zitieren
robotto7831a Geschrieben 28. September 2002 Autor Geschrieben 28. September 2002 Das wäre eine Möglichkeit. Muss ich mal ausprobieren. Frank Zitieren
Art Geschrieben 28. September 2002 Geschrieben 28. September 2002 jep. geschnallt. hehehe. uff. Zitieren
Jaraz Geschrieben 28. September 2002 Geschrieben 28. September 2002 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 Zitieren
Wolle Geschrieben 28. September 2002 Geschrieben 28. September 2002 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). Zitieren
Jaraz Geschrieben 28. September 2002 Geschrieben 28. September 2002 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 Zitieren
DevilDawn Geschrieben 29. September 2002 Geschrieben 29. September 2002 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 =) Zitieren
Jaraz Geschrieben 29. September 2002 Geschrieben 29. September 2002 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 Zitieren
robotto7831a Geschrieben 29. September 2002 Autor Geschrieben 29. September 2002 Das klappt tatsächlich. Genau das habe ich gesucht. Danke euch allen. Frank Zitieren
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.