【发布时间】:2015-08-21 01:15:09
【问题描述】:
我正在开发一个现有应用程序,该应用程序使用一些 JOIN 语句来创建“不可变”对象(即,始终将结果连接起来以创建可处理的对象 - 仅来自一个表的结果将毫无意义)。
例如:
SELECT r.*,u.user_username,u.user_pic FROM articles r INNER JOIN users u ON u.user_id=r.article_author WHERE ...
将产生一个类型的结果,比如ArticleWithUser,这是显示带有作者详细信息的文章(如博客文章)所必需的。
现在,我需要创建一个表featured_items,其中包含列item_type(文章、文件、评论等)和item_id(文章、文件或评论的ID),并查询它以获取某种类型的特色项目的列表。
假设articles 以外的表包含不需要与其他表连接的整个对象,我可以简单地使用动态生成的查询来拉取它们,例如
SELECT some_table.* FROM featured_items RIGHT JOIN some_table ON some_table.id = featured_items.item_id WHERE featured_items.type = X
但是如果我需要从上述类型ArticleWithUser 中获取特色项目怎么办?我不能使用动态生成的查询,因为语法不适合两个 JOIN。
所以,我的问题是:有没有更好的做法来检索总是组合在一起的结果?也许在应用程序端进行第二次 JOIN?
或者我是否必须为每种组合结果类型编写特殊代码?
谢谢!
【问题讨论】:
-
当然,如果mysql不能
handle它,那么将你的不可变与中间件一起猛击。Handle被定义为 mysql 中可能发生的事情,包括你不知道的事情。 -
Mysql 绝对可以处理它,但是查询太临时了(至少 2 个 JOIN,显式命名字段等)。我正在寻找一种更易于维护的解决方案,该解决方案将尽可能接近将 JOINed 表视为单个表。
-
喜欢一个视图。看看:>
标签: php mysql database join database-design