MySql 查询值可以为空

MySql Query value can be null

我有这个问题

SELECT * 
  FROM `Products` 
 WHERE brand REGEXP '$brandFilter' 
   AND categories REGEXP '$categoryFilter' 
   AND color REGEXP '$colorFilter' 
   AND price BETWEEN '$priceMin' AND '$priceMax' 
   AND size REGEXP '$sizeFilter'

我使用 PHP 并且获得的每个值都可以为空 如果值为空,可以检查 SQL 吗? 例如:如果“$brandFilter”不为空

SELECT * 
  FROM Products
 WHERE brand REGEXP '$brandFilter'

可以在代码中做到这一点,但它很长,因为有可能得到 3 个值 null

感谢您的帮助!

从SQL的角度来看,你需要OR个条件:

SELECT * 
FROM Products 
WHERE (brand      REGEXP :brandFilter    OR :brandFilter    IS NULL)
  AND (categories REGEXP :categoryFilter OR :categoryFilter IS NULL)
  AND (color      REGEXP :colorFilter    OR :colorFilter    IS NULL)
  ...

您可能希望在您的应用程序中动态构建 where 子句,这可能会产生更高效的 SQL 代码。

请注意,这使用绑定参数而不是在查询字符串中连接变量。推荐阅读:How can I prevent SQL injection in PHP?.