Hello dearest community,
EDITED
这是我的解决方案,基于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 ;
我认为可以增强此功能以支持数值字段的搜索
下面的原始问题
首先,我希望这不是一个转贴问题。 我想创建一个灵活的搜索过程。也就是说,可以从参数本身提供列ad和要搜索的列的值。目前这是我的搜索程序:
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 ;
您可以看到此过程仅适用于某些要搜索的列。是否可以(并且安全)创建一个允许我使用任何列作为定义搜索条件进行搜索的搜索过程?
由于
答案 0 :(得分:2)
您可以使用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'字段;如果需要,可以添加它。