Es klingt als ob Sie wahrscheinlich einige Verknüpfungstabellen in Ihrer Datenbank benötigen. Wenn Sie kommagetrennte Listen in Spalten speichern, um sie mit anderen kommagetrennten Listen zu vergleichen, wird Ihre Leistung beeinträchtigt, wenn Sie irgendeine Art von Skalierung erreichen.
ich sehr empfehlen würde Sie mehr über die Verknüpfung Tabellen (assoziative Einheiten), um vielleicht überzeugen Sie lesen etwas Ihre Datenbank-Design zu ändern: https://en.wikipedia.org/wiki/Associative_entity
Ihre Frage zu beantworten, wie Sie FIND_IN_SET
verwenden würden mehrere Suchen durchführen In einer einzelnen Abfrage müssten Sie Ihre Abfrage dynamisch erstellen.
Hier ist ein einfaches Beispiel, um Ihnen einfach zu zeigen, wie Sie eine Abfrage dynamisch erstellen. Führen Sie die erforderlichen Schritte aus, um die SQL-Injektion zu verhindern (http://php.net/manual/en/security.database.sql-injection.php).
// This is the list you want to search against - for your actual implementation you would use your column name
$haystack_str = '2,4,6,8,10';
// This is the comma separated list you want to use as your needle
$search_str = '1,2,3';
// Break the string apart into separate values
$search_array = explode(',', $search_str);
// Store your query fragments
$query_array = array();
// Loop through each string value you want to use as your needle
foreach ($search_array as $needle) {
// PLEASE TAKE PRECAUTIONS AGAINST SQL INJECTION !!!
$query_array[] = sprintf('FIND_IN_SET("%s","%s")', $needle, $haystack_str);
}
// Join all pieces together using OR
$query_str = implode(' OR ', $query_array);
// Show your example query
echo 'SELECT ' . $query_str . ';';
Beispiel: https://eval.in/867963
Dies ergibt die folgende Abfrage: SELECT FIND_IN_SET("1","2,4,6,8,10") OR FIND_IN_SET("2","2,4,6,8,10") OR FIND_IN_SET("3","2,4,6,8,10");
Gibt einen Wert im Bereich von 1 bis N, wenn die String str in der Stringliste strlist ist, die aus von N Teilsträngen. Gibt 0 zurück, wenn str nicht in strlist oder wenn strlist ist die leere Zeichenkette. https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set
Die Beispielabfrage wird 1
erzeugen, die eine Ihrer Suchwerte angibt, ist in Ihrem Set.
Sie müssen FIND_IN_SET für jeden einzelnen Eintrag in der Variable verwenden, eine ODER auf die Kontrollen der Anwendung .... aber das ist wirklich schlecht Datenbank-Design, und Sie sollten Ihre Tabellen normalisieren, wenn überhaupt möglich, die Art der Abfrage zu machen leichter –
* „ich habe eine Variable, die eine durch Kommata getrennte Liste enthält.“ * - Dieser Teil wird zu mir, ist unklar. Ihre Frage steht zu breit in Bezug auf diese zu sein. Wird es oder wird es nicht? –