首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >params程序

params程序
EN

Database Administration用户
提问于 2022-06-12 10:27:10
回答 1查看 72关注 0票数 0

如何在WHERE中写入正确的PROCEDURE子句,这取决于数组中的参数,其默认值为NULL。

我的尝试

代码语言:javascript
复制
DELIMITER //
CREATE PROCEDURE `task`(IN param1 TEXT, IN param2 TEXT)

BEGIN
  SELECT *
  FROM customer
    LEFT JOIN items 
       ON customer.id = items .id
  WHERE
    CASE
      WHEN param1 is NULL OR param1  = "" then " " else id IN (param1)
    END
    CASE
      WHEN param2 is NULL OR param2  = "" then " " else name IN (param2)
    END


END//

WHERE子句应该检查每个参数是否为null,如果为null,则转到下一个参数,如果不是,它应该执行公式f.e.q `name` IN (param2),然后检查next param

我想从这个查询中得到类似的结果。

代码语言:javascript
复制
  SELECT *
  FROM customer
    LEFT JOIN items 
       ON customer.id = items .id
  WHERE 1=1
  " . (($this->params["param1"]==array())?"" : "AND id IN (:param1)") . "
  " . (($this->params["param2"]==array())?"" : "AND item IN (:param2)") . "
EN

回答 1

Database Administration用户

发布于 2022-06-13 05:49:34

我建议采用另一种查询:

代码语言:javascript
复制
SELECT *
FROM customer
LEFT OUTER JOIN items ON customer.id = items .id
WHERE FIND_IN_SET(id, param1) OR FIND_IN_SET(name, param2)

输入参数是字符串,而不是数组。MySQL没有数组类型。

阅读有关函数发现_在……里面_SET()的内容。它搜索包含逗号分隔列表的字符串。

请注意,此查询很难优化。它不会在idname上使用索引,因此它必须执行表扫描。如果表很大,这将不利于性能。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/313263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档