t-m-s: Sonderzeichen/Zahlen in MySQL

Hallo!
Ich möchte gerade eine MySQL-Tabelle in einer Liste ausgeben. Für jeden Buchstabe gibt es eine extra Liste. Das klappt schon prima:

SELECT * FROM artikel WHERE thema LIKE '".$_GET[anfangsbuchstabe]."%' ORDER BY thema ASC

Jetzt möchte ich aber noch eine Kategorie "sontige" haben, in der alle Zahlen (0-9) und Sonderzeichen (+*~#...) angezeigt werden. Wie kann ich eine solche Abfrage machen??

Thomas

  1. Hello,

    Ich möchte gerade eine MySQL-Tabelle in einer Liste ausgeben. Für jeden Buchstabe gibt es eine extra Liste. Das klappt schon prima:

    SELECT * FROM artikel WHERE thema LIKE '".$_GET[anfangsbuchstabe]."%' ORDER BY thema ASC

    Jetzt möchte ich aber noch eine Kategorie "sontige" haben, in der alle Zahlen (0-9) und Sonderzeichen (+*~#...) angezeigt werden. Wie kann ich eine solche Abfrage machen??

    Die Sinnigkeit des Statements möchte ich hier nicht ansprechen, das übernehmen vielleicht die Anderen?

    Jedenfalls sieht es doch so aus, dass Du hier die beiden Teilmengen "Ich weiß, was ich suche" und "Der ganze Rest" bilden willst, oder? "Ich weiß, was ich suche" hast Du nochmal unterteilt in verschiedene Unterteilmengen.

    Wie kann man denn nun den Rest anzeigen, das war doch die Frage, oder?

    Würde da eventuell eine Negierung etwas nützen?

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Die einzige Möglichkeit, die mir bekannt ist, wäre die hier:
      NOT LIKE 'A%' and NOT LIKE 'B%' and NOT LIKE 'C%' ...and  NOT LIKE 'Z%'

      Doch das ganze erscheint mir etwas lang. Daher dachte ich, da wird es bestimmt was kürzeres geben...

      1. Hello,

        Die einzige Möglichkeit, die mir bekannt ist, wäre die hier:
        NOT LIKE 'A%' and NOT LIKE 'B%' and NOT LIKE 'C%' ...and  NOT LIKE 'Z%'

        Doch das ganze erscheint mir etwas lang. Daher dachte ich, da wird es bestimmt was kürzeres geben...

        Naja, wenn die Datenbank mit UTF-8 arbeitet, wird das wahrscheinlich doch die kürzere Version sein. :-((

        Aber wenn es nur um den Anfang des Strings geht, ist LIKE sowieso nicht der beste Freund.
        Da ist Substring() besser und außerdem gibt es noch "in()"

        where substring(spaltenname,1,1) not in ('A','B','C', ...)

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. echo $begrüßung;

    Ich möchte gerade eine MySQL-Tabelle in einer Liste ausgeben. Für jeden Buchstabe gibt es eine extra Liste. Das klappt schon prima:
    Jetzt möchte ich aber noch eine Kategorie "sontige" haben, in der alle Zahlen (0-9) und Sonderzeichen (+*~#...) angezeigt werden. Wie kann ich eine solche Abfrage machen??

    MySQL kennt neben LIKE auch RLIKE für reguläre Ausdrücke.

    SELECT * FROM artikel WHERE thema RLIKE '[1]' ORDER BY thema

    SELECT * FROM artikel WHERE thema LIKE '".$_GET[anfangsbuchstabe]."%' ORDER BY thema ASC

    Bitte informiere dich über das Thema Database Security und da speziell über SQL Injection. Anschließend verwende mysql_real_escape_string() für alle Werte, die du in ein SQL-Statement einfügst. Informiere dich bitte ebenfalls über Magic Quotes und wie man sie deaktivert, denn die versuchen ebenfalls SQL-Injection zu verhindern, sind aber nicht direkt für MySQl geeignet.

    echo "$verabschiedung $name";


    1. ^A-Z ↩︎