我认为我的问题最好通过一个例子来解释:假设我想为流媒体音乐编写一个网络服务器。我在songs
表中有以下列:
|song_id|song_name|song_genre|song_length|artist
我想让我的用户能够保存播放列表,但我不希望通过明确指定播放列表中的歌曲来定义我的播放列表,而是通过类似“所有歌曲来自ringo starr”的内容来定义播放列表。表示当ringo starr的新歌曲被添加到表格中时,播放列表会自动拥有它们。实际上我想要的是一个名为playlists
的表,其中包含一个mysql视图列表。
最天真的方法是简单地创建一个名为playlists
的表,其中一个列将被称为playlist_query
,它将为上面的示例存储类似字符串"select song_id from songs where artist='ringo starr'
的内容
这当然是非常不安全的,但是在没有更好的解决方案的情况下就足够了,因为这个应用程序仅在我们公司内部由少数员工使用,他们都是了解mysql的优秀程序员。 / p>
那你有什么建议?这个丑陋的解决方案,还是有更简单的方法来做到这一点?
答案 0 :(得分:1)
您可以在playlists
表格中存储视图的名称,而不是查询本身。
您仍然需要创建所需的视图,但我不知道这对您的“安全问题”有何帮助。
您能详细说明需要什么样的安全性吗?
答案 1 :(得分:1)
我将播放列表定义为过滤器列表,其中过滤器可能是歌曲ID,艺术家ID,歌曲名称,类型...然后,我将获取每个过滤器的所有歌曲如果您希望播放列表与过滤器的顺序相同,则单个查询将文件管理器与简单OR
或使用UNION
组合在一起。请注意,您需要额外的努力才能按照查询顺序从UNION
获取结果,请参阅this answer。
这种方法的优点:
不可否认,我不能多说这个解决方案的性能。不过应该不会太糟糕。