mysql - 如果value = 0则缩短where语句

Kal*_*reg 8 php mysql where

我想知道是否有可能以优雅的方式根据某些变量值缩短查询.

例如:我有值命名$var = 0,我想发送一个如下所示的查询:

$query = "SELECT id, name, quantity FROM products WHERE quantity > 100";
Run Code Online (Sandbox Code Playgroud)

但是$ var!= 1我想发送一个这样的查询:

$query = "SELECT id, name, quantity FROM products WHERE quantity > 100 AND id = '$var'";
Run Code Online (Sandbox Code Playgroud)

因此,根据$ var的值,我想执行一个查询.它们仅与最后一个表达不同.我找到了两种可能的解决方案,但它们并不优雅,我根本不喜欢它们.

一个是用PHP制作的:

if ( $var == 0 ) {
  $query_without_second_expression
} else {
  $query_with_second_expression
}
Run Code Online (Sandbox Code Playgroud)

第二个是在mysql中制作的:

SELECT WHEN '$var' <> 0 THEN id, name, quantity 
FROM products WHERE quantity > 100 AND id = '$var' ELSE id, name, quantity 
FROM products WHERE quantity > 100 END
Run Code Online (Sandbox Code Playgroud)

但我不喜欢它 - 每个想法在一些whay中加倍查询.我可以这样做吗?

SELECT id, name, quantity 
FROM products WHERE quantity > 100 
CASE WHEN $var <> 0 THEN AND id = '$var' 
Run Code Online (Sandbox Code Playgroud)

它更短,并在需要时添加部分查询.当然,真正的查询要复杂得多,并且真正期望更短的语句.有人有想法吗?

小智 5

如果我理解得好..

$query = "SELECT id, name, quantity FROM products WHERE quantity > 100";
if ( $var != 0 ) {
  $query .= " AND id = '$var'";
}
Run Code Online (Sandbox Code Playgroud)

你喜欢它吗?