mysql - 每行动态sql

标签 mysql

我有一个代表书店之类的数据库。有一个包含书籍所属类别的表。某些类别仅使用另一个包含类别-项目关系的表来定义。但也有一些类别可以通过编程方式定义——可以使用查询(SELECT item_id FROM items WHERE author = "John Smith")定义特定作者的类别。所以我的类别表有一个“查询”列;如果它不为空,我使用它来获取类别中的项目,否则我使用 category_items 表。

目前,我让应用程序(PHP 代码)做出此决定,但这意味着当我们遍历所有类别时需要进行大量单独的查询。有什么方法可以将此动态 SQL 合并到连接中吗?像这样的东西:

SELECT c.category, IF(c.query IS NULL, count(i.items), count(EXECUTE c.query)
FROM categories c
LEFT OUTER JOIN category_items i
ON c.category = i.category

EXECUTE 需要准备好的语句,但我需要为每一行准备不同的语句。另外,EXECUTE 不能用在表达式中,它只是一个顶层语句。有什么建议吗?

最佳答案

当您想按出版商列出图书时会发生什么?国家?语?您必须将它们全部放入一个“category_items”表中。您将如何选择要执行的动态查询?查询中查询方法不会起作用。

我觉得你的“类”概念太宽泛了,导致SQL过于复杂。我会替换“类别”以仅代表“流派”(对于书籍)。流派在它们自己的表中定义,item_genres 将它们连接到 items 表。 Books-by-author 和 books-by-genre 应该只是应用程序级别的单独查询,而不是尝试在数据库/SQL 级别使用相同(某种)查询来执行它们。 (如果您有音乐和书籍,它们可能不应该全部存储在一个“项目”表中,因为它们是不同的概念……有不同的流派、作者与艺术家等)

我知道这并不能真正按照您希望的方式解决您的问题,但我认为您不尝试那样做会更开心。

关于mysql - 每行动态sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441538/

相关文章:

C# Socket 服务器 - Flash 客户端 - 数据库访问和性能

php - 更新/添加新记录不起作用

php - 由于不同的 MySQL 版本导致不可预测的行为

php - 从mysql检索数据无输出

mysql - SQL 和不同的

php - 使用php mysql为div分配不同的类名

mysql - 使用 React-Hook-Form 插入

mysql - 在多个数据库中更改表

mysql - 如何选择零结果mysql?

MySQL on delete cascade 不起作用...我正在使用 mac os x lion 和 sequel pro