首页 > 解决方案 > 如何在存储在其他表 MySQL 中的查询中应用 where 条件

问题描述

我有一个要求,我将在哪里获取存储在其他表中的条件,例如id > 10amount < 100

我正在使用存储过程来执行一些任务,其中我正在检索这个 where 条件并使用它将一些数据插入到表中。但它不工作可能是由于撇号被附加在前面和结尾。

set @whereC = (select FilterCondition from SearchLeads where `SearchLeadID` = sid);
INSERT INTO `JTemporary` 
        (`ZipID`,`FirstName`,`LastName`,`MemberSince`,
        `Address1`,`Phone`,`Email`,`CompanyName`,
        `BusPhone`,`Deleted`,`CreatedBy`,`CreateDate`,
        `UpdatedBy`,`UpdateDate`)
  select `ZipCode`,`FirstName`,`LastName`,`AddDate`,
        `AddressLine1`,`HomePhone`,`HomeEmail`,`Employer`,
        `BusinessPhone`,'N',loginUserID,now(),
        loginUserID,now() 
    from membertrans where @whereC;

这是行不通的。当我通过复制该条件并替换变量直接应用时,它可以工作,但不适用于变量。

如何做到这一点?

标签: phpmysqlcodeigniter

解决方案


这是一个适用于我的 mysql 数据库的示例。

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(whereClause varchar(512))
BEGIN
SET @str = concat('SELECT * from mytable where ',whereClause);
PREPARE myquery FROM @str;
EXECUTE myquery;
END

我可以调用上面传入的任何我喜欢的 where 子句,例如

call test ('col1 between 5 and 10 and col2=''a bit of text''')

这里的关键显然是 SET/PREPARE/EXECUTE,这是您需要做的。

我用了这个问题Is it possible to perform a string in MySQL? 推导出上面的一些内容,因为我自己的所有示例都在 SQL Server 中。


推荐阅读