Dazu gibt es zwei Möglichkeiten. Der erste ist der ziemlich offensichtliche Ansatz. Angenommen, Sie haben alle Wörter, die in einem Array namens $necessaryWords:
erscheinen müssen$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE 1';
foreach ($necessaryWords as $word)
$sql .= ' AND concat(subject,body) LIKE "%' . $word . '%"'; //Quotes around string
Verwenden Sie jedoch %foo% ist ziemlich langsam, da keine Indizes verwendet werden können, daher kann diese Abfrage bei großen Tabellen und/oder einer hohen Anzahl notwendiger Wörter zu Leistungsproblemen führen.
Der andere Ansatz wäre ein FULLTEXT Index auf subject und body . Sie könnten den Volltext MATCH IN BOOLEAN MODE verwenden so:
$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE MATCH(subject,body) AGAINST("';
foreach ($necessaryWords as $word)
$sql .= ' +' . $word;
$sql .= '")';
Beachten Sie, dass Ihre Tabelle UPDATE:Ab MySQL 5.6
, MyISAM verwenden muss um FULLTEXT zu verwenden Indizes.InnoDB unterstützt FULLTEXT auch Indizes. Ich denke, dies könnte die bessere Wahl in Bezug auf die Leistung sein. Weitere Dokumentation zum Volltext im booleschen Modus finden Sie im Handbuch
.