В общем случае язык SQL строго требует, чтобы число и типы данных столбцов результата были известны во время компиляции запроса. То, о чем вы просите, не может быть известно до тех пор, пока не будет подготовлен план выполнения и вы не начнете искать данные.
Следовательно, лучшее, что вы сможете сделать, - это выполнить три отдельных шага:
Даже в этом случае этот тип сводки обычно лучше обрабатывается в вашем клиентском коде или инструменте отчетов. Единственной хорошей новостью является то, что все еще возможно выполнить все это на большинстве платформ с помощью одной длинной строки SQL.
Для этой конкретной ситуации, когда вы четко просматриваете номера недель, вы можете обойти проблему, предполагая, что все 53 возможных недели вперед (не 52, из-за частичных недель в конце года!), И написание большого оператора SQL, который вручную учитывает все 55 столбцов (53 недели + статья и описание).
Я нашел то, о чем я думал, когда я отправил свой вопрос. Infochimps сохраняет наборы infoboxes из Википедии, такие как этот для музыкальных художников. Это не действительно, что я хочу хотя, потому что это только доступно как загрузка.
В то время как я смотрел, я нашел, как получить доступ к статьям в формате XML с непредставленной разметкой Wiki. По-видимому, это легче на серверах Википедии, но я не уверен в том, было ли легче проанализировать.
Необходимо изучить Freebase (см., например, их музыкальную таблицу художников). Если Вы действительно выбираете Wikipedia, то необходимо, вероятно, загрузить дамп базы данных.
Пример, сравнивающий списки жанров Freebase и Википедии для полосы Radiohead:
Править: Что еще более важно, я включал рабочий пример с помощью mjt, платформа JavaScript, разработанная для Freebase. Вставка копии это в файл, открытый с Вашим браузером, вводит имя художника и видит, какие жанры Freebase имеет для них.
Менее значительно я изменил свои примеры и значение по умолчанию Radiohead.=)
<html>
<head>
<script type="text/javascript" src="http://mjtemplate.org/dist/mjt-0.6/mjt.js"></script>
</head>
<body onload="mjt.run()">
<pre mjt.script="">
var name = mjt.urlquery.name ? mjt.urlquery.name : 'Radiohead';
</pre>
<div mjt.task="q">
mjt.freebase.MqlRead([{
type: '/music/artist',
name: {
value:name,
lang:{name:{value:'English'}}
},
genre: [{
name: {
value:null,
lang:{name:{value:'English'}}}
}]
}])
</div>
<form method="get" action="">
<input type="text" name="name" value="$name" />
<input type="submit" value="search" />
</form>
<table mjt.for="topic in q.result">
<tr mjt.for="(var rowi = 0; rowi < topic.genre.length; rowi++)">
<td><pre mjt.script="">var gname = topic.genre[rowi].name;</pre>$gname.value</td>
</tr>
</table>
</body></html>
Вы, скорее всего, используете другой язык, но надо надеяться можно легко перевести вышеупомянутый запрос.
MusicBrainz (http://musicbrainz.org/) может быть тем, что Вы хотите вместо Википедии. Это - проект сделать свободно лицензируемый, высококачественный набор музыкальных метаданных (название компоновщика, заголовок альбома, заголовок дорожки, имя тромбониста на той дорожке, и т.д.). Они разработали потрясающую базу данных, подробную схему базы данных, всесторонние инструкции по стилю для того, чтобы сделать метаданные точным и последовательным, прикладным программным обеспечением, которое может вставить метаданные в теги в музыкальных файлах данных и API, которым можно использовать данные. Все в свободном доступе и совместно отредактированный.
Одной слабой областью метаданных MusicBrainz является музыкальный жанр. Это вызвано тем, что его такая тяжелая проблема: "фанк" одного человека является "поп" другого человека.