Php 属性值的空白值

Php 属性值的空白值,php,mysql,sql,Php,Mysql,Sql,如果我有 SELECT A,B FROM T1 WHERE A=X and B=Y; 我用php设置它的方式,我知道X和Y可能是空的,因为我可以选择使用a和/或B进行搜索。所以假设只给出了a,那么Y必须是什么才能返回a=X的所有元组?SQL是否有某种“blank”函数?给定两个搜索参数X和/或Y,您可以使用或和中的Is NULL通过以下任一参数进行搜索: SELECT A,B FROM T1 WHERE (X IS NULL OR A=X) AND (Y IS NULL OR B

如果我有

 SELECT A,B FROM T1 WHERE A=X and B=Y;

我用php设置它的方式,我知道X和Y可能是空的,因为我可以选择使用a和/或B进行搜索。所以假设只给出了a,那么Y必须是什么才能返回a=X的所有元组?SQL是否有某种“blank”函数?

给定两个搜索参数X和/或Y,您可以使用
中的
Is NULL
通过以下任一参数进行搜索:

SELECT A,B 
FROM T1 
WHERE (X IS NULL OR A=X) AND
    (Y IS NULL OR B=Y)

给定两个搜索参数X和/或Y,您可以使用
IS NULL
按以下任一参数进行搜索:

SELECT A,B 
FROM T1 
WHERE (X IS NULL OR A=X) AND
    (Y IS NULL OR B=Y)

如果知道A或B中的数据永远不会是空值,则可以使用这种排序;如果知道这些列中的任何一列都不会是空值,则可以在if函数中修改空值

MySQL:

    SELECT A,B FROM table where A=IF('X' <> '', X, NULL) OR B=IF('Y' <> '', Y, NULL)
从表中选择A,B,其中A=IF('X'',X,NULL)或B=IF('Y'',Y,NULL)
SQL Server:

    SELECT A,B FROM table where A=IIF('x' <> '', X, NULL) OR B=IIF('Y' <> '', Y, NULL)
从表中选择A,B,其中A=IIF('x'',x,NULL)或B=IIF('Y'',Y,NULL)
如果通过PHP传递查询,您的另一个选择是不包含B的AND/OR子句(如果存在A),即:


$querystr=“从表格中选择A,B,其中“($A!=”?“A=$A:”)。($B!=”?“B=$B”)

如果知道A或B中的数据永远不会是空值,则可以使用这种排序;如果知道这些列中的任何一列都不会是空值,则可以在if函数中修改空值

MySQL:

    SELECT A,B FROM table where A=IF('X' <> '', X, NULL) OR B=IF('Y' <> '', Y, NULL)
从表中选择A,B,其中A=IF('X'',X,NULL)或B=IF('Y'',Y,NULL)
SQL Server:

    SELECT A,B FROM table where A=IIF('x' <> '', X, NULL) OR B=IIF('Y' <> '', Y, NULL)
从表中选择A,B,其中A=IIF('x'',x,NULL)或B=IIF('Y'',Y,NULL)
如果通过PHP传递查询,您的另一个选择是不包含B的AND/OR子句(如果存在A),即:


$querystr=“从表格中选择A,B,其中“($A!=”?“A=$A:”)。($B!=”?“B=$B”)

以下内容将返回A或B为空(从未填写)或A和B均等于您定义的值的所有行:

SELECT A, B FROM T1 WHERE (A IS NULL or A=X) and (B IS NULL or B=Y);

如果您正在查找其他内容,请澄清您的问题。

以下内容将返回A或B为空(从未填写)或A和B均等于您定义的内容的所有行:

SELECT A, B FROM T1 WHERE (A IS NULL or A=X) and (B IS NULL or B=Y);

如果您正在查找其他内容,请澄清您的问题。

我想您应该检查
A是否为空

因此,整个SQL查询将如下所示:

SELECT A, B FROM T1 WHERE (A=X OR A IS NULL) AND (B=Y OR B IS NULL);
如果表中的列
A
是可选的,则可以插入新记录或更新现有记录,而无需为此列添加值。这意味着该字段将以空值保存。NULL用作未知或不适用值的占位符


更多信息:

我想您应该检查
A是否为NULL

因此,整个SQL查询将如下所示:

SELECT A, B FROM T1 WHERE (A=X OR A IS NULL) AND (B=Y OR B IS NULL);
如果表中的列
A
是可选的,则可以插入新记录或更新现有记录,而无需为此列添加值。这意味着该字段将以空值保存。NULL用作未知或不适用值的占位符

更多信息:

你是说

 SELECT A,B 
   FROM T1 
   WHERE (A=X or X is null)
     and (B=Y or Y is null)
     and not(A is null and B is null);
你是说

 SELECT A,B 
   FROM T1 
   WHERE (A=X or X is null)
     and (B=Y or Y is null)
     and not(A is null and B is null);

您的意思是
为NULL
(如
中的A为NULL或A=X
)?您的意思是
为NULL
(如
中的A为NULL或A=X
)?因此,可以肯定的是,如果我的Y是一个变量$v,我知道它为空,并且我做了$v=”“,这对SQL来说将被视为NULL?或者我甚至必须这样做,我可以照原样传递吗?@rex你不能与
NULL
相比
NULL
不等于任何值。在SQL中编写
WHERE为NULL
WHERE为notnull
。看看这是否有帮助:好的,谢谢,我只是不确定SQL是如何处理一个NULL的PHP变量。所以,为了确定,如果我的Y是一个变量$v,我知道它是空的,并且我做了$v=“”,这对SQL来说将被视为NULL?或者我甚至必须这样做,我可以照原样传递吗?@rex你不能与
NULL
相比
NULL
不等于任何值。在SQL中编写
WHERE为NULL
WHERE为notnull
。看看这是否有帮助:好的,谢谢,我只是不确定SQL是如何处理NULL的PHP变量的。