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?.
我有这个问题
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?.