gpt4 book ai didi

mysql - 允许 MySQL 查询的可选参数

转载 作者:行者123 更新时间:2023-11-29 01:23:30 24 4
gpt4 key购买 nike

我有一个搜索页面,其中包含多个用于创建精确搜索的字段。每个字段都是可选的。我正在尝试开始制作我的 sql 查询,以便它可以在给定适当变量的情况下工作,但我遇到了麻烦。

这是我目前拥有的 SQL 查询:

SELECT
indicator.indid,
indicator.indicator,
indtype.indtype,
provider.provider,
report.report,
actor.actor
FROM
actor,
indicator,
indtype,
report,
provider
WHERE
indicator.indtypeid = indtype.indtypeid
AND indicator.actorid = actor.actorid
AND indicator.reportid = report.reportid
AND report.providerid = provider.providerid
AND indicator.indicator LIKE '%$indicator%'
AND indicator.indtypeid = $indtypeid;

每当我提供一个 indicator 和一个 indtypeid 时,搜索工作正常。但是,当我将 indtypeid 字段留空并将变量设置为 *(作为其默认值)时,查询不会返回任何结果。我试过手动玩查询,它似乎不喜欢 *% 符号。基本上,如果只指定了一个指标而没有指定 indtypeid,我想返回所有 indtypeids 的所有指标。

我确信我遗漏了一些小东西,但如果能提供任何帮助,我将不胜感激。我可能一开始就错了。

最佳答案

试试这个:

SELECT i.indid,    i.indicator, it.indtype, 
p.provider, r.report, a.actor
FROM actor a
INNER JOIN indicator i ON a.actorid = i.actorid
INNER JOIN indtype it ON i.indtypeid = it.indtypeid
INNER JOIN report r ON i.reportid = r.reportid
INNER JOIN provider p ON r.providerid = p.providerid
WHERE 1 = 1
AND ($indicator IS NULL OR i.indicator LIKE '%$indicator%')
AND ($indtypeid IS NULL OR i.indtypeid = $indtypeid);

因此,如果您传递 $indicator = NULL,那么第一个条件 AND ($indicator IS NULL OR i.indicator LIKE '%$indicator%') 将被忽略,因为它将解析为 True,第二个条件也是如此。

我删除了其他 Where 条件并将它们替换为 JOIN,并为 WHERE 1 = 1 使查询正常工作如果您将两个变量 $indicator$indtypeid 传递给每个变量 NULL 值,在这种情况下它将返回自 以来的所有结果>1 = 1 始终为真。

关于mysql - 允许 MySQL 查询的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10193521/

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