Mysql 将SQL查询存储在表中,并在选择-可能时动态运行它们?良好做法?

Mysql 将SQL查询存储在表中,并在选择-可能时动态运行它们?良好做法?,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我目前正在考虑MySQL中的一个数据库模式,其中我将SELECT查询存储到某个表列中,以便在被选中时动态执行它们,并传递结果而不是实际的查询 这有可能吗?或者这可能是坏习惯?从技术上讲,是否可以将结果表传递给单个字段,至少这样我可以通过PDO运行查询以返回嵌套的结果数组?还有其他选择吗 我已经读到,这可以通过存储过程来实现,尽管我掌握了存储过程的概念,但我想不出如何使用存储过程来实现这一点。您可以这样做,但您这样做的目的是什么 我建议使用以下视图: 与存储不同,创建视图时语法应该有效 字段中的

我目前正在考虑MySQL中的一个数据库模式,其中我将
SELECT
查询存储到某个表列中,以便在被选中时动态执行它们,并传递结果而不是实际的查询

这有可能吗?或者这可能是坏习惯?从技术上讲,是否可以将结果表传递给单个字段,至少这样我可以通过PDO运行查询以返回嵌套的结果数组?还有其他选择吗


我已经读到,这可以通过存储过程来实现,尽管我掌握了存储过程的概念,但我想不出如何使用存储过程来实现这一点。

您可以这样做,但您这样做的目的是什么

我建议使用以下视图:

  • 与存储不同,创建视图时语法应该有效 字段中的SQL可能具有无效语法
  • 它更容易调试和修改
例如,假设要存储的查询之一是:

SELECT product_category, COUNT(*) AS category_count
FROM product
GROUP BY product_category;
可以创建定义此查询的新“视图”对象:

CREATE VIEW prod_cat_count AS
SELECT product_category, COUNT(*) AS category_count
FROM product
GROUP BY product_category;
现在,名为“prod_cat_count”的对象存储在数据库中。在内部,数据库只知道“prod_cat_count”等于我们提到的SELECT查询。创建视图时,数据库将验证语法(例如,检查所有列是否存在,检查您是否忘记了GROUP BY)

然后,每当您想要获取此数据/运行此查询时,都可以运行此语句(例如,在SQL或应用程序代码中):

如果随后决定更改产品类别的计数方式,则可以调整视图:

SELECT product_category, COUNT(*) AS category_count
FROM product
GROUP BY product_category
ORDER BY product_category;

希望有帮助

XY问题的教科书示例。你为什么想要如此奇怪的混乱?假设我想存储一些简单的JSON数据。但是,这些数据不是常量,并且取决于其他一些表的内容,这让我认为最好通过查询来处理。问题是每一行都以不同的方式依赖于表,这意味着我不能只编写一个全局查询来绑定值以处理所有行,而是需要一组查询,其中每一行处理自己的行。是否有更好的解决方案,或者我只是有一个糟糕的设计?我想值得一提的是,我在这里管理元数据。这肯定是一个糟糕的设计,由于缺乏信息,对于更好的实现,我们无法提出任何建议。从你刚才所说的,我只能猜测数据库结构也有缺陷。你有数据标准化吗?您研究过NoSQL解决方案吗?例如,Mongo确实存储json。但是,你又在问一个XY问题。描述您需要这些micro JSON或其他什么的初始应用程序。最好不要在评论中,而是在一个坚实的、深思熟虑的问题中找到问题:我将如何准确地使用它们?而是存储视图名称,并在子查询中引用相应的视图?是的,没错。我将更新我的答案以进一步解释。
SELECT product_category, COUNT(*) AS category_count
FROM product
GROUP BY product_category
ORDER BY product_category;