如何在存储在其他表MySQL中的查询中应用where条件

时间:2018-10-11 11:13:56

标签: php mysql codeigniter

我有一个条件,我应该在哪里获取存储在其他表中的条件,例如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;

这不起作用。当我直接通过复制该条件并替换变量来应用它时,它可以工作,但对变量不起作用。

如何实现?

2 个答案:

答案 0 :(得分:1)

这是一个适用于我的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,这是您需要做的。

由于我自己的所有示例都在SQL Server中进行,因此我使用了问题Is it possible to execute a string in MySQL?来得出上面的一些内容。

答案 1 :(得分:0)

您没有将任何列放在条件与选择查询列 FilterCondition 相匹配的位置。 例如

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 **filterColumn ** IN (or any other clause) @whereC;

我认为这是问题所在,尝试此方法可能会对您有所帮助。