Select 带有 where 子句的语句 Like in array

Select statement with where clause Like in array

我知道如何对单个值执行 SQL LIKE % 查询,如下所示:

$sql = "SELECT * FROM Farmers WHERE Available_products LIKE ('%Bananas%')";

但是如果我的 LIKE 的搜索词来自一个数组,我该怎么做呢?例如,假设我们有一个这样的数组:

$_POST['Products']="Cacaos,Bananas";
$array=implode(',', $_POST['Products']);
$sql = "SELECT * FROM Farmers WHERE Available_products LIKE ('%$array%')";

我想获取数据库中列 Available_Products 包含 Cacaos 或 Bananas 或两者的所有记录

将数组转换为正则表达式并使用REGEX代替LIKE

$_POST['Products'] = array('Cacaos', 'Bananas');
$regex = implode('|', $_POST['Products']);
$sql = "SELECT * FROM Farmers WHERE Available_products REGEX :regex";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':regex', $regex);
$stmt->execute();

您可以借助 REGEXP 进行尝试。

 $_POST['Products']="Cacaos,Bananas";
 $array=implode('|', $_POST['Products']); 
 $sql = "SELECT * FROM Farmers WHERE   
              Available_products REGEXP". $array; 

您也可以这样做:

// Populating join table.    
CREATE TABLE temp_table_myArray (myArray nvarchar(255));
    INSERT INTO temp_table_myArray (myArray) VALUES ('Cacaos');
    INSERT INTO temp_table_myArray (myArray) VALUES ('Bananas');

// Query using the join table.
    SELECT F.*
    FROM Farmers AS F
        INNER JOIN temp_table_myArray AS T ON (F.Available_products LIKE(CONCAT('%',T.myArray,'%')));

但我认为有更好的PHP方法来解决您的问题...