我正在创建一个使用better-sqlite3
的电子应用程序,我想知道,一般来说,是否有办法运行使用带有可选参数LIKE
的查询?假设有一个表人,其中包含"名字"和"姓氏"列。用户可以按以下方式进行搜索:
仅名字,在这种情况下,查询将是:
SELECT * from people WHERE firstname LIKE %userEnteredFname%
仅姓氏,在这种情况下,查询将是:
SELECT * from people WHERE lastname LIKE %userEnteredLname%
或两个字段:
SELECT * from people WHERE firstname LIKE %userEnteredFname% AND lastname LIKE %userEnterLname%
仅供参考,有一种方法可以使用可选参数进行INSERT
:
const stmt = db.prepare('INSERT INTO cats (name, age) VALUES (?, ?)');
const info = stmt.run('Joey'); //age would be null
查询取决于输入的搜索参数。果然,您可以为少量输入字段准备语句,但我有大约 7 个,那里可以有很多组合。
运算符LIKE
在其任何操作数NULL
时返回NULL
。
因此,对于所有列,如果传递的值NULL
,则使用COALESCE()
将返回1
(=TRUE
):
SELECT *
FROM people
WHERE COALESCE(firstname LIKE '%' || ? || '%', 1)
AND COALESCE(lastname LIKE '%' || ? || '%', 1)
?
占位符代表将传递给查询的参数。
只要userEnterLname
是空字符串,
SELECT * from people WHERE firstname LIKE %userEnteredFname% AND lastname LIKE %userEnterLname%
与
SELECT * from people WHERE lastname LIKE %userEnteredLname%
因此,除非你想搜索它们,否则只需将额外的变量留空。