No veo ninguna manera de escribir una consulta SELECTA elegante para obtener lo que desea. Tendrás que hacer un preprocesamiento.
tienes que estar que ejecuta esta consulta MySQL desde algún tipo de programa, la aplicación, la escritura, etc. No estoy seguro de lo que el lenguaje es, pero esto es lo que yo haría en PHP:
/* $data is where our data is going to be stored in our desired format */
$data = array();
/* $columns is a list of all column names */
$columns = array();
/* $rows is a list of all row names (probably '1', '2', etc) */
$rows = array();
$result = mysql_query('SELECT column, value, row FROM TableName');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
/* if this row isn't in $data yet, add it */
if (!array_key_exists($row['row'], $data) {
$data[$row['row']] = array();
}
/* if this column isn't in $columns yet, add it */
if (!in_array($row['column'], $columns)) {
array_push($columns, $row['column']);
}
/* if this row isn't in $rows yet, add it */
if (!in_array($row['row'], $rows)) {
array_push($rows, $row['row']);
}
/* set the actual value in our multi-dimensional array $data */
$data[$row['row']][$row['column']] = $row['value'];
}
/* free the result (php specific thing) */
mysql_free_result($result);
/* if we didn't set anything (row, column) pairs, set it to null in $data */
foreach ($rows as $r) {
foreach ($columns as $c) {
if (!array_key_exists($c, $data[$r])) {
$data[$r][$c] = null;
}
}
}
Esto colocará todos los datos en el formato que desee en una matriz en PHP.
Por ejemplo, después de ejecutar este algoritmo en los datos de la muestra ya ha introducido, que sería capaz de hacer:
echo $data['2']['age']; // $data['row']['column']
lo que la salida 55.
o si su base de datos no se actualiza en tiempo real (tiene un montón de datos que le gustaría reformatear una vez, en lugar de continuamente), puede extender el guión anterior para tener también "CREAR TABLA", "INSERTAR EN" consultas tha t básicamente recrear la tabla en el formato que estás buscando.
Además, si RECIBE datos en tiempo real, puede escribir la secuencia de comandos descrita anteriormente, pero solo querría eliminar las filas de la tabla original mientras las procesaba, y luego ejecutar la secuencia de comandos siempre que los datos se está poniendo en la mesa original.
¿cómo planeas * usar * un conjunto de resultados con columnas desconocidas? – SingleNegationElimination
Querido Señor, ¿es esto un ... META DB ??? (música malvada: ta ta taaaaaaa) –
@Adrian Me encantan las bases de datos meta :) – Kermit