sql >> Databáze >  >> RDS >> Mysql

Otočte výsledkovou sadu mysql a vytvořte html tabulku/matici

Bude mnoho způsobů, jak toho dosáhnout; některé techniky zahrnují sql k přípravě dynamického pivotu. Můj úryvek níže použije k provedení pivotování php.

  1. Procházejte objekt sady výsledků pomocí foreach() -- Ne, pro přístup k datům nemusíte volat funkci načítání, protože výsledný objekt je iterovatelný.
  2. Vytvořte vícerozměrné seskupovací pole s názvy jako klíči první úrovně a poté s podpolemi s roky jako klíči a hodnotami jako hodnotami.
  3. Vytvořte řadu jedinečných let. Můj přístup zajistí jedinečnost přiřazením roku jako klíče i hodnoty – protože pole nemohou obsahovat duplicitní klíče, hodnoty budou jedinečné, aniž by bylo nutné volat array_unique() později.
  4. Seřaďte roky ASC
  5. Vytvořte pole výchozích hodnot pro každý rok. V tomto případě přiděluji - jako výchozí hodnotu.
  6. Přidejte doslovné slovo name na začátek pole obsahujícího jedinečné roky -- to bude použito k vyplnění řádku záhlaví tabulky.
  7. Raději používám implode() k vytvoření řádku tabulky s proměnnými buňkami.
  8. printf() je čistý způsob prolnutí doslovného textu s proměnnými – vyhýbá se syntaxi interpolace/řetězení.
  9. V každém následujícím řádku tabulky nahraďte výchozí roční hodnoty ročními hodnotami příslušné osoby a uveďte je pomocí implode() .
  10. Pokud existuje možnost, že sada výsledků je prázdná, můžete většinu tohoto úryvku zabalit do if ($resultObject) { ... } blokovat.

Kód:(Ukázka )

$grouped = [];
$columns = [];    

$resultObject = $mysqli->query("SELECT `name`, `value`, `year` FROM `Testab`");
foreach ($resultObject as $row) {
    $grouped[$row['name']][$row['year']] = $row['value'];
    $columns[$row['year']] = $row['year'];
}

sort($columns);
$defaults = array_fill_keys($columns, '-');
array_unshift($columns, 'name');

echo "<table>";
    printf(
        '<tr><th>%s</th></tr>',
        implode('</th><th>', $columns)
    );
    foreach ($grouped as $name => $records) {
        printf(
            '<tr><td>%s</td><td>%s</td></tr>',
            $name,
            implode('</td><td>', array_replace($defaults, $records))
        );
    }
echo "</table>";

Výstup:(s přidanými mezerami/tabulátorem pro snadnější čtení)

<table>
    <tr>
        <th>name</th> <th>2018</th> <th>2019</th> <th>2020</th>
    </tr>
    <tr>
        <td>Tom</td>  <td>15</td>   <td>4</td>    <td>6</td>
    </tr>
    <tr>
        <td>Kate</td> <td>18</td>   <td>20</td>   <td>-</td>
    </tr>
</table>


  1. odstranit informace z tabulky mysql, když uživatel zavře svůj prohlížeč

  2. Připojení odmítnuto (PGError) (postgresql a rails)

  3. Vyberte záznamy z dneška, tohoto týdne, tohoto měsíce php mysql

  4. Jak vytvořit dynamický dotaz navázáním parametrů v node.js-sql?