代码之家  ›  专栏  ›  技术社区  ›  NewDeveloper

Select语句与数组中的where子句类似

  •  0
  • NewDeveloper  · 技术社区  · 8 年前

    我知道如何对这样的单个值执行类似SQL的%查询:

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

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

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

    Available_Products 含有可可豆或香蕉或两者兼有

    3 回复  |  直到 8 年前
        1
  •  1
  •   Barmar    8 年前

    将数组转换为正则表达式并使用 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();
    
        2
  •  0
  •   Ankur Garg    8 年前

    您可以在REGEXP的帮助下尝试。

     $_POST['Products']="Cacaos,Bananas";
     $array=implode('|', $_POST['Products']); 
     $sql = "SELECT * FROM Farmers WHERE   
                  Available_products REGEXP". $array; 
    
        3
  •  0
  •   Stéphane CLEMENT    8 年前

    您还可以执行以下操作:

    // 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方法来解决你的问题。。。