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