tabelle durchsuchen nach Übereinstimmungen mit Array

kevinweb

Grünschnabel
Hallo,

ich möchte gerne in einer mySQL Datenbank eine Tabelle nach Datensätzen absuchen, wo das Feld Keywords eine oder mehrere Übereinstimmungen mit strings in einem bereitgestellten Array enthält. Das Array kann dabei allerdings bis zu 20-teilig und größer sein. Ein Ansatz wäre, mit sehr vielen OR-Bedingungen abzufragen, zum Beispiel:
PHP:
Where keywords LIKE '%$suchwoerter[0]%' OR  '%$suchwoerter[1]% OR  '%$suchwoerter[2]% usw''

aber das scheint mir nicht grad optimal zu sein, zumal ich nicht weiß, wie groß das Array sein wird und aber gerne alle Teile in die Suche mit einbeziehen möchte. Kennt jemand einen Guten Weg, so eine Suche umzusetzen?

Gruß, Kevin
 
Das müsste es sein:

PHP:
$felder = array("a","b","c","d","e","f","g");

$in = implode("\", \"",$felder);

$sql = "SELECT feldname FROM tabelle WHERE feldname in (\"".$in ."\")";

Hat aber den Nachteil das dann der Inhalt von "feldname" genau mit den Einträgen im Array übereinstimmen muss.

Damit wird egal wie groß das Array ist eine Abfrage erstellt die auch nach Teilen des Begriffes sucht:

PHP:
$felder = array("a","b","c","d","e","f","g");


$in = implode("%' OR feldname LIKE '%", $felder);
$sql = "SELECT feldname FROM tabelle WHERE feldname LIKE '%$in%'";
 
Zuletzt bearbeitet:
Hallo tombe,
Der erste Teil ist nicht was ich suche, weil der Inhalt von keywords genau dem Array entsprechen muss, also nicht geeignet, wenn es mehrere Keywords gibt. Aber deine Ergänzung war nun genau was ich gesucht habe! wow, du hast es ja echt drauf mit mysql! Danke dir, Bewertung folgt.
 
Das kann mittels REGEXP viel eleganter gelöst werden
SQL:
SELECT *
FROM tabelle
WHERE feldname REGEXP 'CD|FG|IJ'

und implenetiert in php
PHP:
$pattern = implode('|', $suchwoerter);
$sql = "
    SELECT *
    FROM tabelle 
    WHERE keywords REGEXP '{$pattern}";
 
Zuletzt bearbeitet von einem Moderator:
Zurück