gpt4 book ai didi

mysql - 如何在简单的动态 SQL 查询中处理空值

转载 作者:行者123 更新时间:2023-11-29 22:59:00 24 4
gpt4 key购买 nike

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

我正在使用 ADOquery 和 MySQL DB,其中 LoanID 和 BookID 字段的数据类型都是整数。该表是典型的图书馆数据库借阅表,显示[LoanID]、[LoanDate]、[BorrowerID]、[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)的标准做法。 :

$qry = 'SELECT * FROM table1';
$qry .= ' WHERE 1 = 1';
if ($loanID) {
$qry .= ' AND loanID = :loanID';
}
if ($bookID) {
$qry .= ' AND bookID = :bookID';
}
$sth = $dbh->prepare($qry);
if ($loanID) {
$sth.bindParam(':loanID', $loanID);
}
if ($bookID) {
$sth.bindParam(':bookID', $bookID);
}
$sth->execute();

或者,您可以在 SQL 中执行此操作,但效率不高。在本例中,传入 NULL 作为参数:

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

关于mysql - 如何在简单的动态 SQL 查询中处理空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28591357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com