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
(?あなたがあなたのクライアントに依存した方法で探している特定のメディアIDに拘束されることに、SQLiteの中でパラメータを示すための一つの方法です取得する方法
);データはDBからクライアントコードに複数の行で渡され、クライアントコードで簡単にそれらを1つの列形式にまとめることができます。
クライアントとして使用している環境や言語について何も知らなくても、クライアント側の部分をコーディングする方法は、私たちにとっては難しいことです。しかし、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から文字列 'artist'に移動する方法はないので、スペックを正確に一致させることは明らかに不可能です...しかし、それは私の独創性が得られるほど近いです;-)。
これは完全に動作します!これはまさに私が必要なものです!それはパフォーマンスを激しくしますか? – jetru
はい!それはパフォーマンスを強く打つ!だから私はあなたにそれをしないように言ったのです!それに加えて、醜い、維持不能なコードです。 –