php - 如何在存储在其他表 MySQL 中的查询中应用 where 条件
问题描述
我有一个要求,我将在哪里获取存储在其他表中的条件,例如id > 10
或amount < 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;
这是行不通的。当我通过复制该条件并替换变量直接应用时,它可以工作,但不适用于变量。
如何做到这一点?
解决方案
这是一个适用于我的 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 中。
推荐阅读
- python - 虚拟子类有什么用?
- c# - 为什么我在 C# 中的 webrequest 代码中不断收到 401
- c++ - FFTW 高级接口:fftw_plan_many_r2r() 不起作用
- angular - Angular 5 数据可视化 - 仪表板框架
- python-3.x - 在 python3 中使用 u 前缀获取输出的好方法是什么
- .net - docker dotnet 镜像文件创建
- react-native - 如何延迟调用 AppRegistry.registerComponent
- javascript - 如何在 fabric.util 类结构版本 2 中扩展成员(属性)?
- join - 我可以在 snappy 数据中加入三个表吗
- javascript - 选项卡更改或打开检查元素后模糊()不触发