MySQL Filter

Thomasio

Erfahrenes Mitglied
Ich versuche krampfhaft eine MySql Abfrage zu bauen, die Einträge danach filtert, ob sie mit einem Buchstaben a-z,A-Z oder mit etwas anderem beginnen.
In PHP ginge das relativ einfach, aber ich würde lieber von Haus aus nur die passenden Einträge lesen, statt alle lesen und dann in PHP aussortieren.
Gibt es einen passenden MySql Befehl für

Code:
mysql_query("SELECT * FROM `tablename` WHERE `feldname` LIKE A% - Z%");
mysql_query("SELECT * FROM `tablename` WHERE `feldname` NOT LIKE A% - Z%");
 
Mir war schon klar, dass meine Syntax nicht funktioniert, sonst müsste ich hier nicht fragen.

Ich hab schon einiges versucht mit "REGEXP", "alnum" und "alpha", aber ich bin scheinbar zu doof um aus den Beispielen, die es im MySql Manual gibt die richtige Syntax für meine Zwecke rauszulesen.
Spätestens, wenn ich noch zwischen "lower" und "upper" unterscheiden muss und das noch doppelt, für LIKE und NOT LIKE, stehe ich im Wald.
 
Schon den weiterführenden Link auf der Seite angeklickt?
http://dev.mysql.com/doc/refman/5.1/de/pattern-matching.html

Da steht es ziemlich eindeutig.

Ich hab schon einiges versucht mit "REGEXP", "alnum" und "alpha"

Am besten kann man dir helfen, wenn du die eigenen Versuche immer dazu schreibst. Dann weiß jeder wo deine Probleme liegen und man kann sich einen geeigneten Weg zum Erklären suchen, statt ins blaue hinein etwas aus der Glaskugel zu schreiben, was dir unter Umständen nicht hilft.
 
Zuletzt bearbeitet:
Ok, dann mal langsam.
Ich nutze seit Jahren eine MySql Datenbank auf meiner Homepage, aber ich habe mich nie näher mit der MySql Syntax befasst, weil man bei 10 Usern einfach keinen Filter braucht.
Anders gesagt, beim abfragen, mache ich nichts weiter als

Code:
$abfrage = mysql_query("SELECT * FROM `tablename`");
while($row = mysql_fetch_object($abfrage)) {
// ...
}

dann habe ich das Ganze in PHP, und da kenne ich mich aus, sprich ich kann sortieren, filtern usw, ohne MySql lernen zu müssen, die Mehrbelastung für den Server habe ich immer in Kauf genommen, weil es mir einen Haufen Zeit erspart, wenn ich MySql nicht weiter lernen muss.

Jetzt baue ich an was Neuem und dafür brauche ich eine neue Tabelle in der DB, die mehr Einträge hat, sprich ich würde die Serverlast gerne reduzieren, indem ich von Haus aus nur die Datensätze lese, die ich brauche, allerdings fehlt mir immer noch die Zeit mich ausführlich mit MySql zu beschäftigen.
Also habe ich Google bemüht und mich eine Weile an Trial&Error probiert, mit wenig Erfolg.

Ich habe so ziemlich jede Kombination probiert, die ich mir vorstellen konnte, z.B.

Code:
mysql_query(SELECT * FROM `tablename` WHERE `feldname` REGEXP '^alpha');

aber mal abgesehen davon, dass das schon falsch ist, fehlt mir dazu noch die NOT Version, denn die gibts auch unter dem weiterführenden Link nicht, oder vielleicht habe ich sie übersehen.

Der langen Rede kurzer Sinn: Irgendwann werde ich wohl ein paar Wochen investieren und die komplette MySql Syntax lernen müssen, für jetzt wäre ich dankbar, wenn mir jemand die Syntax ohne weitere Erklärungen gibt.
 
Code:
mysql_query(SELECT * FROM `tablename` WHERE `feldname` REGEXP '^alpha');

aber mal abgesehen davon, dass das schon falsch ist

Gut erkannt ^ ^
http://dev.mysql.com/doc/refman/5.1/de/regexp.html hat gesagt.:
[:character_class:]

In einem Ausdruck in eckigen Klammern ([ und ]) stellt [:character_class:] eine Zeichenklasse dar, die alle zu dieser Klasse gehörigen Zeichen erkennt.

Dort steht: "[:alpha:]" und nicht nur "alpha".

Also habe ich [...] mich eine Weile an Trial&Error probiert, mit wenig Erfolg.

Egal, weiter so! Erfahrung ist die Summe aller Fehler.

Irgendwann werde ich wohl ein paar Wochen investieren und die komplette MySql Syntax lernen müssen,

Buch: "SQL in a Nutshell" - oft auch bei Google Books auffindbar ;)

für jetzt wäre ich dankbar, wenn mir jemand die Syntax ohne weitere Erklärungen gibt.

Dafür gibt es ein Job-Forum: http://www.tutorials.de/forum/jobboerse-jobs-tutorials-de/
 
Na, Jobbörse brauchts dann doch nicht, käme mir auch blöd vor, für einen Einzeiler einen Job auszuschreiben.

Auf jeden Fall mal danke für die Hilfe, ich habe es mir dann doch zusammenreimen können.
Für alle, die es interessiert, hier die Lösung:

Code:
mysql_query(SELECT * FROM `tablename` WHERE `feldname` REGEXP '^[[:alpha:]]');
mysql_query(SELECT * FROM `tablename` WHERE `feldname` NOT REGEXP '^[[:alpha:]]');
 
Zurück