我正在使用一些现有的应用程序,它使用一些JOIN语句来创建" immutable"对象(即结果总是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
表(文章' s,文件& #39; s或评论的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?
或者我是否必须为每种组合结果类型编写特殊代码?
谢谢!
答案 0 :(得分:1)
一个视图可以像一张胆小的人的桌子一样。
https://dev.mysql.com/doc/refman/5.0/en/create-view.html
观看次数可以包含joins
。和other views
。请记住,在创建时,他们会在基础表上拍摄当时存在的列的快照,因此Alter Table
stmts向这些表中添加列{select>在{*}}中选择。
答案 1 :(得分:1)
我认为需要阅读MySQL视图主题的旧文章: By Peter Zaitsev
要回答关于它们是否被广泛使用的问题,它们是数据库开发人员工具包的主要部分,并且在某些情况下提供了显着的好处,这些好处与索引有关,而不是与视图的性质有关,本身。