SQLite没有你需要的初学者的“数据透视”功能,而“逗号分隔值”部分肯定是一个演示文稿问题,试图推入任何一种模式都是荒谬的(也可能是不可行的)数据库层,不管SQL的方言可能涉及 - 它绝对是你在客户端做的工作的一部分,例如报告设施或编程语言。
使用SQL对数据进行访问,并将呈现留给其他图层。
你如何让你的数据是
SELECT media.id, media.uri, people.name, people.role
FROM media
JOIN media_to_people ON (media.id = media_to_people.media_id)
JOIN people ON (media_to_people.people_id = people.id)
WHERE media.id = ?
ORDER BY people.role, people.name
(的?是表明SQLite中参数的一种方式,被绑定到你的方式寻找那取决于你的客户机上的特定媒体ID );数据将从数据库以多行形式发送到您的客户端代码,您的客户端代码可以轻松地将它们放入您想要的单列表单中。
我们很难说如何对客户端部分进行编码,而无需了解任何关于您用作客户端的环境或语言的信息。但是在Python例如:
def showit(dataset):
by_role = collections.defaultdict(list)
for mediaid, mediauri, name, role in dataset:
by_role[role].append(name)
headers = ['mediaid', 'mediauri']
result = [mediaid, mediauri]
for role in sorted(by_role):
headers.append('people(%s)' % role)
result.append(','.join(by_role[role]))
return ' '.join(headers) + '\n' + ' '.join(result)
即使这样也不能完全匹配你的天赋 - 你要的标题,如“人(艺术家)”,而你也可以指定该角色的编码为一个int,并提没有办法从int到字符串“艺术家”,所以显然不可能完全符合你的规范......但它和我的聪明才智一样接近;-)。
+1用于推荐用客户端应用程序语言对行进行后处理! – 2009-06-10 05:43:16
嗯,所以没有办法专门为不同的角色获取people.name列? 我在想这样的事情: SELECT media.id,media.uri,artists.name,publishers.name FROM media JOIN media_to_people ON media_to_people.media_id = media.id JOIN people AS艺术家,人AS AS publishers ON(艺术家。编辑器的名称并不是那么重要,但是这不符合预期... – jetru 2009-06-10 05:49:15