如何将查询存储在MySQL列中,然后使用该查询?

如何将查询存储在MySQL列中,然后使用该查询?,mysql,sql,database-design,Mysql,Sql,Database Design,例如,假设我正在创建一个表,其中存储装运站点的促销代码。我想让表将促销代码与代码的验证器匹配,例如 PROMO1: Order must have 3 items PROMO2: Order subtotal must be greater than $50 我希望将查询和/或例程存储在表中的一列中,并能够使用内容进行验证(从某种意义上讲) SELECT * FROM Orders WHERE Promo.ID = 2 AND Promo.Validation = True 或者类似的东西

例如,假设我正在创建一个表,其中存储装运站点的促销代码。我想让表将促销代码与代码的验证器匹配,例如

PROMO1: Order must have 3 items
PROMO2: Order subtotal must be greater than $50
我希望将查询和/或例程存储在表中的一列中,并能够使用内容进行验证(从某种意义上讲)

SELECT * FROM Orders 
WHERE Promo.ID = 2 AND Promo.Validation = True

或者类似的东西。有什么想法吗?

我不会将查询保存在数据库中,有更好的可能性

你必须决定哪一个最适合你的需要(根据你的问题,我不清楚)。你可以用


可能有更好的方法来解决这个问题,但问题的答案是编写存储过程,返回所需的结果。在我工作的地方(我讨厌这种设计),它们实际上将应用程序使用的所有查询和dml存储在存储过程中

您还可以使用动态sql动态生成查询。对于MySql,请参阅下面的帖子,它可能会对您有所帮助

否则,您还可以将查询以字符串格式存储在数据库中,然后检索它们并使用execute语句执行它们,如post指出的


不过,我个人不喜欢这样的设计。将查询存储在XML中并不是一个坏的选择,将应用程序编写为可从XML进行扩展和配置,这样您就不需要更改代码来添加新的验证逻辑,而只需在XML中进行配置。

这是一个非常糟糕的主意。您不希望将验证逻辑存储为数据库中的查询。对应用程序进行验证并设置约束(可能使用
检查
约束,如果可用)以确保数据完整性。然后,程序员必须在每次添加促销时更新应用程序代码,与一个技术含量较低的内容作者能够在内容管理系统中输入内容不同?作为说明:当你去购物网站时,如果你在适当的字段中键入促销代码,它会告诉你它是有效的还是无效的,如果它是有效的,就应用它。我想以一种易于扩展的方式设置系统,以便可以轻松添加促销代码/促销代码逻辑对…然后将验证器放在一个以促销代码为参数的存储过程中。我仍然不清楚为什么验证器放在存储过程中比放在表中更好…首先是开销。从DB中选择查询,然后生成语句,然后执行此语句。我甚至不知道你是怎么想到这个主意的。那你最好谷歌“sql注入”。我甚至想不出你的方法有一个积极的方面。不需要迂腐。不管发生什么,SQL注入都是一个问题,当然,无论我是否使用这种方法,我都会清理任何输入。我提出了这个想法,作为创建一个动态代码系统的概念的一部分,该系统将由非技术倾向的用户使用,而无需我的干预。您的动态SQL也称为预处理语句。只是为了澄清一下。是的,在MySQL中它是预先准备好的语句,但通常与其他实现中的动态SQL概念相同。