gpt4 book ai didi

mysql - 如何创建灵活的MySQL搜索程序?

转载 作者:行者123 更新时间:2023-11-29 09:02:24 25 4
gpt4 key购买 nike

您好,最亲爱的社区,

已编辑

这是我的解决方案,基于 Devart回答。我稍微修改了过程参数并修复了一些 % 的事情..

DELIMITER $$

DROP PROCEDURE IF EXISTS `cosmedicdb`.`proc_searchall` $$
CREATE PROCEDURE `cosmedicdb`.`proc_searchall` (output TEXT, tbl varchar(50), kolom_kriteria VARCHAR(20),
kolom_nilai VARCHAR(20))
BEGIN

SET @query = CONCAT('SELECT ', output, ' FROM ',tbl,' WHERE ', kolom_kriteria, ' LIKE CONCAT(','\'%',kolom_nilai, '%\')');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END $$

DELIMITER ;

我认为可以增强它以支持数值字段的搜索

下面的原始问题

首先,我希望这不是一个转发问题。我想创建一个灵活的搜索过程。也就是说,列和要搜索的列的值可以从参数本身提供。目前,这是我的搜索过程:

DELIMITER $$

DROP PROCEDURE IF EXISTS `cosmedicdb`.`proc_searchtindakan` $$
CREATE PROCEDURE `cosmedicdb`.`proc_searchtindakan` (kolom VARCHAR(20),
kolomnilai VARCHAR(20))

BEGIN
CASE kolom
WHEN 'jenis'
THEN
SELECT jenis, harga
FROM cosmedicdb.tb_mastertindakan
where jenis like concat('%',kolomnilai,'%');
END CASE;
END $$

DELIMITER ;

您可以看到,此过程仅适用于要搜索的特定列。是否可以(并且安全)创建一个搜索过程,允许我使用任何列作为定义搜索条件进行搜索?

谢谢

最佳答案

您可以使用prepared statements来做到这一点:构建一个查询并执行它,例如-

DELIMITER $$

CREATE PROCEDURE proc_searchtindakan(IN kolom VARCHAR(20), IN kolomnilai VARCHAR(20))
BEGIN
SET @query = CONCAT('SELECT ', kolom, 'FROM cosmedicdb.tb_mastertindakan WHERE ', kolom, ' LIKE CONCAT(\'%\'', kolomnilai, '\'%\'');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
$$

DELIMITER ;

...在示例中,我已从字段列表中删除了“harga”字段;如果需要的话添加它。

关于mysql - 如何创建灵活的MySQL搜索程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207318/

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