MySQL: Platzhalter/Joker

Hallo Experten,

ich wüsste gerne, welches Zeichen als Platzhalter in MySQL benutzt werden kann. ist es das Asteriskzeichen (*) wie bei DOS/Win oder das Fragezeichen (?)? Ich benötige es, um bei einer Suche nach Auswahl der Suchparameter (Selektboxes) und drücken des Weiter-Buttons im Fall dass eine Box nicht ausgewählt wurde die entsprechende Variable als Platzhalter zu definieren. Dies würde den Code erheblich verkürzen und die Suche insgesamt erleichtern.

Gruß
Huttatta

Hallo Huttatta,

das funktioniert in SQL mit %.
Z.B. liefert
SELECT name FROM foo WHERE name LIKE „%bar%“
alle Zeilen der Spalte (des Attributs) name aus der Tabelle foo wobei in der Spalte name irgendwo bar enthalten ist.
% ist vergleichbar mit *.

Hoffe das hilft weiter.
Frank

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Huttatta!

ich wüsste gerne, welches Zeichen als Platzhalter in MySQL
benutzt werden kann.

Unter mySQL können die beiden Zeichen

 % (Prozent) und
 \_ (Unterstrich)

als Platzhalter verwendet werden.
Falls Du genau nach diese Zeichen suchen möchtest, müssen diese durch einen \ (Backslash) ‚escaped‘ werden.

Das Prozentzeichen steht für eine beliebige Anzahl von Zeichen (auch null Zeichen); der Unterstrich für GENAU EIN beliebiges Zeichen.

Der Vergleich findet dann mittels

 SELECT .... WHERE Feld LIKE 'Diet%'

statt.

Vorsicht noch bei Groß-/Kleinschreibung: LIKE unnterscheidet NICHT zwischen Groß- und Kleinschreibung. Falls zwischen Groß-/Kleinschreibung unterschieden werden soll, muß LIKE BINARY verwendet werden.

Mehr Infos dazu: http://www.mysql.com/documentation/mysql/bychapter/m…

br
Thomas

Hi Frank,

also: Wenn ich richtig kombiniere wirft also

SELECT name FROM foo WHERE name = „%“

alle Einträge als Ergebnis aus. Genau so hätte ich es nämlich gerne. In der realen Suchmaske kann ich dann die Variable $bundesland als % definieren, falls dieses nicht ausgewählt wurde, und somit eine Bundesweite Suche ermöglichen. Dabei bleibt der Quellcode der Zieldatei unverändert: Durch „SELECT * FROM foo WHERE land = ‚$land‘ AND bundesland = ‚%‘“ wird dann das Bundesland sozusagen ignoriert und alle Einträge aufgelistet, in denen land = ‚$land‘ ist.

Kombiniere ich richtig ?

Gruß
Huttatta der Großkombinator :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Frank,

also: Wenn ich richtig kombiniere wirft also

SELECT name FROM foo WHERE name = „%“

alle Einträge als Ergebnis aus. Genau so hätte ich es nämlich

Nein.
SELECT name FROM foo WHERE name LIKE „%“

= Testet immer auf Gleichheit, nur mit LIKE funktionieren Platzhalter.

gerne. In der realen Suchmaske kann ich dann die Variable
$bundesland als % definieren, falls dieses nicht ausgewählt
wurde, und somit eine Bundesweite Suche ermöglichen. Dabei
bleibt der Quellcode der Zieldatei unverändert: Durch „SELECT
* FROM foo WHERE land = ‚$land‘ AND bundesland = ‚%‘“ wird
dann das Bundesland sozusagen ignoriert und alle Einträge
aufgelistet, in denen land = ‚$land‘ ist.

Naja, entweder statt = LIKE verwenden, oder aber dynamisch zusammenbauen, ich mache das immer mit:

$sql = "SELECT foo FROM bar WHERE 1 ";
if ($\_POST["a"]) $sql .= "AND a='$\_POST[a]' ";
if ($\_POST["b"]) $sql .= "AND a='$\_POST[b]' ";

…das sollte etwas schneller gehen in der Abfrage als mit vielen
LIKE „%“.

Alexander

1 Like