gpt4 book ai didi

python - Mysql多动态条件select查询

转载 作者:行者123 更新时间:2023-11-29 16:30:53 25 4
gpt4 key购买 nike

假设我有 table :

** Table**
---------------------------------------
ID Type Number Size Location
---------------------------------------
1 Apple 5 M A
2 Apple 4 S B
3 Banana 5 M B
4 Apple 7 S A
5 Pear 5 L C
6 Pear 5 M A
7 Apple 3 L A
8 Pear 2 M A
9 Banana 4 M B

我的程序是select.py [-t类型] [-n数字] [-s大小] [-l位置](所有参数都是可选的。)

如果给出 -t,那么它将运行“select * from table where Type= args.type”;

如果给出 -n,那么它将运行“select * from table where Number= args.number”;

如果 -t 和 -n 都给定,那么它将运行“select * from table where Type=args.type 和 Number = args.number";

...

如果给出了所有参数,那么它将运行“select * from table where Type= args.type and Number = args.number and ... and ..”;

如何编写一个通用的 where 子句来涵盖所有上述可能的情况?

最佳答案

我不知道你是否使用 ORM,但你可以使用如下所示的逻辑构建原生 MySQL 查询。这个想法是每个 IFNULL 的第一个参数即 NULL 值将成为程序中查询的变量。这样,如果值为 null,则我们将图元的该列中的数据与其自身进行比较,以便条件返回 true。

-- IF AT LEAST ONE PARAMETER PASSED
SELECT A.*
FROM TEST A
WHERE
A.ID=IFNULL(NULL,A.ID)
AND A.TYPE=IFNULL('Pear',A.TYPE)
AND A.NUMBER=IFNULL(NULL,A.NUMBER)
AND A.SIZE=IFNULL('L',A.SIZE)
AND A.LOCATION=IFNULL(NULL,A.LOCATION);

-- NO PARAMETER PASSED
SELECT A.*
FROM TEST A
WHERE
A.ID=IFNULL(NULL,A.ID)
AND A.TYPE=IFNULL(NULL,A.TYPE)
AND A.NUMBER=IFNULL(NULL,A.NUMBER)
AND A.SIZE=IFNULL(NULL,A.SIZE)
AND A.LOCATION=IFNULL(NULL,A.LOCATION);

查看 SQL Fiddle 上的工作演示

关于python - Mysql多动态条件select查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53927447/

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