SQL-like search string

OP #7202318
Lesenswert?
• ▲
▼
SQL lernen. Ein einfaches Tischspiel mit einem Feldtitel haben. Ich muss 
die Suche anhand des Titels durchsuchen. Für den Fall, dass ich ein 
Spiel namens Age of Empires III: Dynasties habe und LIKE mit dem 
Parameter Age of Empires III: Dynasties verwende, funktioniert alles 
einwandfrei, die Suche gibt den Datensatz mit diesem Namen zurück. Aber 
wenn ich mit Age of Empires III suche, gibt es keine Datensätze zurück:

CODE:-
SELECT * from games WHERE (lower(title) LIKE 'age of empires III');

Das bringt nichts. Wäre es eine gute Idee für mich, etwas anderes als 
LIKE zu verwenden?

Ich verwende MySQL.
Gast
Lesenswert?
• ▲
▼
Oliver G. schrieb:

> Das bringt nichts. Wäre es eine gute Idee für mich, etwas anderes als
> LIKE zu verwenden?

Nein, like ist schon genau das Richtige. Man muss es halt auch richtig 
verwenden. Sprich: RTFM.

Daraus kann man dann auch solche interessanten Informationen 
extrahieren, wie die, dass like Suchstrings mit Platzhaltern kann...
(Firma: Funkenflug Industries)
Lesenswert?
• ▲
▼
> Fehlt die %-Wildcard davor und dahinter
Korrekt.
1
SELECT * from games WHERE (lower(title) LIKE '%age of empires III%');

Edit:
Das Lowercase kannst Du Dir sparen wenn Du bei der Tabelle eine case 
insensitive (ci) Kollation verwendest.
1
SELECT * from games WHERE title LIKE '%age of empires III%';
Persönliche Seite
Lesenswert?
• ▲
▼
Ben B. schrieb:
> Das Lowercase kannst Du Dir sparen

Es kann sogar kontraproduktiv sein. In manchen Sprachen (z.B. griechisch 
IIRC) haben mehrere Kleinbuchstaben den gleichen Großbuchstaben. Wenn 
man jetzt ins Suchfeld den einen Kleinbuchstaben eingibt, das "lower" 
aus dem String den jeweils anderen Kleinbuchstaben macht, stimmt es 
nicht überein. Daher immer eine "case insensitive" Vergleichsfunktion 
verwenden, denn die machen das i.d.R. korrekt.
Gast
Lesenswert?
• ▲
▼
> SQL lernen

Hmmm... Bei 1000 Datensätzen funktionieren lower() und like() 
einwandfrei. Aber bei realen Datenbanken kann so etwas ewig dauern.

Das zentrale Problem bei SQL sind die Performance-Optimierungen. Z.B. 
funktioniert "%" am Ende meist recht gut - die Datenbank kann einen 
Index benutzen. Idealerweise den Index gleich als lowercase anlegen. 
Dagegen klappert die Datenbank bei "%" am Anfang die ganze Tabelle ab.

Solltest dir Beispiele mit Gigabyte an Daten suchen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.