Autor Zpráva
danhill
Profil
Dobrý den,
prosím potřeboval bych pomoci s vyreslením tabulky, u které se bude různě měnit rowspan v první sloupci.

Vytáhnu si data z db.
$select_groups = $mysqli->query("SELECT * FROM profyl_group");

Klasicky bych to udělal jednoduše takto:
foreach ($select_groups AS $select_group) {
  echo '<tr><td>'.$select_group['id_group'].'</td><td>'.$select_group['id_global_group'].'</td><td>'.$select_group['id_place'].'</td><td><input name="delete-group" type="submit" value="Delete"/></td></tr>';
}

Výsledek bude vypadat asi takto:
1    8    138    Delete
1    8    23     Delete
1    8    33     Delete
1    1    54     Delete
2    1    67     Delete
2    5    102    Delete
2    5    139    Delete
No,ale já bych potřeboval abych měl dymanický rowspan prvního sloupce.
Tedy asi takto:
1    8    138    Delete
     8    23     Delete
     8    33     Delete
     1    54     Delete
2    1    67     Delete
     5    102    Delete
     5    139    Delete
A to je mi jasné,že nebude tak jednoduché :)
Potřebné udaje získám dotazem:
$select_count_groups = $mysqli->query("SELECT `id_group`, COUNT(`id_group`) AS rowspan FROM profyl_group GROUP BY `id_group` ");
Tím dostanu :
id_group  rowspan
1             4
2             3
Z čehož by se dal získat celkový počet id_group z tabulky, a zároveň i rowspan pro jednotlivé řádky.

No ale jak to aplikovat do vykreslení tabulky, to mi uniká.
Pomůžete prosím?
Děkuji.
nethor
Profil
To by znamenalo poměrně hodně dotazů na DB.
Šel bych na to jinak- pomocí 2 cyklů:
1. průchodem foreach spočítá počet řádků se stejnou hodnotou v 1.sloupci a zároveň načte hodnoty 2., 3. a 4. sloupce pole $Tmp
2. foreach tabulku vykreslí (už máš hodnoty i číslo pro rowspan)
Tomášeek
Profil *
danhill:
Nevím, jestli by to nešlo sloučit do jednoho SQL dotazu, ale pokud použiješ ty dva dotazy tak, jak je máš, mělo by to být přeci ok.

Z druheho dotazu budeš mít data v následujícím formátu:

$rowspan = array(1 => 4, 2 => 3);

Pak už ti stačí jen ten jeden cyklus.
$last_group_id = 0;

foreach ($select_groups as $select_group) {
    echo '<tr>';
        if ($select_group['id_group'] != $last_group_id) {
            // pokud nastala nova skupina, vypis prvni bunku s rowspanem
            echo '<td rowspan="' . $rowspan[$select_group['id_group']] . '">' . $select_group['id_group'] . '</td>';
        }
        echo '<td>Dalsi bunky</td>';
        echo '<td>Dalsi bunky</td>';
        echo '<td>Dalsi bunky</td>';
    echo '</tr>';

    $last_group_id = $select_group['id_group'];
}
danhill
Profil
Ty jo, sice moc nevím jak to funguje,ale funguje :)
Moc děkuji, výsledek je moc dobrý...
Jen pro kontrolu udávám celý kod znova,tak jak ho mám na webu, jestli jsem to dobře pochopil:

$select_groups = $mysqli->query("SELECT * FROM profyl_group");
$select_count_groups = $mysqli->query("SELECT `id_group`, COUNT(`id_group`) AS rowspan FROM profyl_group GROUP BY `id_group` ");

$rowspan = array();
foreach ($select_count_groups AS $select_count_group) {
    $rowspan[$select_count_group['id_group']] = $select_count_group['rowspan'];
}

echo '<table class="classic_table">';
echo '<tr><th>Výjezdová</br>skupina</th><th>Globální</br>skupina</th><th>Provozovna</th><th></th></tr>';
$last_group_id = 0;
foreach ($select_groups AS $select_group) {
    if ($select_group['id_group'] % 2 == 0) {$bg = '#FDE9D9';}
    else {$bg= 'white';}
    
    $global_group = getGlobalGroupFromId ($mysqli,$select_group['id_global_group']);
    $place = getPlaceFromId ($mysqli,$select_group['id_place']);
    
    echo '<tr style="background-color:'.$bg.'">';
    if ($select_group['id_group'] != $last_group_id) {
        echo '<td rowspan="'.$rowspan[$select_group['id_group']].'">'.$select_group['id_group'].'</td>';
    }
    echo '<td>'.$global_group.'</td>';
    echo '<td>MJ'.$place['mj'].' - '.$place['company'].' '.$place['name'].'</td>';
    echo '<td><input name="delete-group" type="submit" value="Delete"/></td>';
    echo '</tr>';
 
    $last_group_id = $select_group['id_group'];
}
echo '</table>';
Kajman
Profil
V prvním dotaze si ještě dejte order by id_group

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: