"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo crear una tabulación cruzada dinámica en MySQL cuando los valores de las columnas son desconocidos?

¿Cómo crear una tabulación cruzada dinámica en MySQL cuando los valores de las columnas son desconocidos?

Publicado el 2024-11-08
Navegar:970

How to Create a Dynamic Cross Tabulation in MySQL When Column Values are Unknown?

Tabla cruzada dinámica en MySQL

Cuando se trata de una tabla con un número desconocido de valores en una columna particular (como "way" en el ejemplo proporcionado), crear una tabulación cruzada en MySQL puede parecer un desafío. El enfoque convencional requiere que usted especifique los nombres de las columnas al momento de realizar la consulta, lo que puede no ser factible en situaciones dinámicas.

Enfoques de solución

Para abordar este desafío, se pueden emplear dos soluciones programáticas :

1. Consultar valores distintos y construir consulta dinámica

Este enfoque implica recuperar los valores distintos de la columna con recuentos inciertos. Usando esta lista de valores, puede construir una consulta dinámica dinámica y agregar las columnas necesarias a su instrucción SELECT.

foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {
  $way = (int) $row["way"];
  $way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";
}
$pivotsql = "SELECT stop, " . join(", ", $way_array) . "FROM `MyTable` GROUP BY `stop`";

2. Consulta fila por fila y posproceso pivote

Este método alternativo implica consultar los datos fila por fila tal como están estructurados en su base de datos. Recopilará los datos en una matriz y luego los dividirá en columnas antes de mostrarlos.

$stoparray = array();
foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {
  $stopkey = $row["stop"];
  if (!array_key_exists($stopkey, $stoparray)) {
    $stoparray[$stopkey] = array("stop"=>$stopkey);
  }
  $waykey = "way_" . $row["way"];
  $stoparray[$stopkey][$waykey] = $row["time"];
}

Ambos enfoques requieren codificación para adaptarse a situaciones dinámicas donde se desconoce el número de columnas. La elección del enfoque dependerá de los requisitos específicos de manipulación de datos y de las consideraciones de eficiencia.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3