Mysql 如何在简单动态SQL查询中处理空值

Mysql 如何在简单动态SQL查询中处理空值,mysql,ado,delphi-2010,Mysql,Ado,Delphi 2010,我想让最终用户可以选择动态查询MySQL数据库。我提供了两个文本框供他们输入搜索条件,然后单击按钮运行查询。第一个文本框允许他们输入一个整数来搜索LoanID字段。第二个文本框允许他们输入一个整数来搜索BookID字段。当输入了两个条件时,查询可以正常工作,但是,如果最终用户只想使用(比如)BookID进行搜索,则在查询中不会得到任何结果。有没有一种方法可以处理非条目(null),这样即使输入了一个条件,查询也可以工作 我正在使用ADOquery和MySQL数据库,其中LoanID和BookID

我想让最终用户可以选择动态查询MySQL数据库。我提供了两个文本框供他们输入搜索条件,然后单击按钮运行查询。第一个文本框允许他们输入一个整数来搜索LoanID字段。第二个文本框允许他们输入一个整数来搜索BookID字段。当输入了两个条件时,查询可以正常工作,但是,如果最终用户只想使用(比如)BookID进行搜索,则在查询中不会得到任何结果。有没有一种方法可以处理非条目(null),这样即使输入了一个条件,查询也可以工作

我正在使用ADOquery和MySQL数据库,其中LoanID和BookID字段的数据类型都是整数。 该表是一个典型的图书馆数据库借阅表,显示[LoanID]、[LoanDate]、[LowerId]、[BookID]。下面是到目前为止的SQL…遵循给出的建议

adoquery1.SQL.Clear;
  adoquery1.SQL.Add('SELECT LoanID, LoanDate, BorrowerSurname,Loan.BookID, BookTitle   FROM Loan,Book,Borrower' );
  adoquery1.SQL.Add('WHERE Borrower.BorrowerID = Loan.BorrowerID AND');
  adoquery1.SQL.Add('Loan.BookID = Book.BookID AND');
  adoquery1.SQL.Add('LoanID = :LoanID OR :loanID IS NULL AND ');
  adoquery1.SQL.Add('Loan.BookID = :BookID OR :BookID IS NULL');
  adoquery1.Parameters.ParamByName('LoanID').Value:= edit1.Text;
  adoquery1.Parameters.ParamByName('BookID').Value:= edit2.Text;
  adoquery1.open;

使用
1=1
作为第一个条件,并仅在填写其他条件时通过添加其他条件来构造查询

这是一种标准做法,使用伪代码(实际上是PHP):

或者,您可以在SQL中执行此操作,但效率不高。在这种情况下,将
NULL
s作为参数传入:

$qry = 'SELECT * from table1';
$qry .= ' WHERE (loanID = :loanID OR :loanID IS NULL)';
$qry .= ' AND (bookID = :bookID OR :bookID IS NULL)';

我试图按照您的建议修改SQL-请参阅原始的后期编辑。获取消息:“参数对象定义不正确。提供的信息不一致或不完整”。在ANDs之后和WHERE之前是否需要空格?我不知道SQL.Add()函数是如何工作的。无论如何,你应该能够从我的样品中找出细节。
$qry = 'SELECT * from table1';
$qry .= ' WHERE (loanID = :loanID OR :loanID IS NULL)';
$qry .= ' AND (bookID = :bookID OR :bookID IS NULL)';