Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Utilizzo di array multidimensionali per creare tabella

    Buon pomeriggio, dovrei, tramite una serie di select , creare una tabella in HTML ma non so come fare.Cercherò di spiegarmi.

    La select è cosi composta:

    codice:
    1°) select count(*) from canoni where Campo5 = 'A'  and Campo6 = ' A'  and concat(Campo3,Campo4) <> 'B5' 
    2°) 
    select count(*) from canoni where Campo5 = 'B1'  and Campo6 = ' A'  and concat(Campo3,Campo4) <> 'B5'
    I valori del Campo5, per la ricerca variano.
    Ho pensato di inserire i valori all'interno di un primo array
    $arrayVal1 = array('A','B1','B2','C1','C2','D1')

    Invece il Campo6 ha valori fissi, che potrebbero anche essere gli stessi.
    $arrayVal2 = array('A','B1','B2','C1','C2','D1')

    Quindi, con questa select dovrei creare una tabella in stile battaglia navale in HTML, e popolarla con i risultati.
    Cosi da avere, il totale in ogni cella per tutti gli incroci che si sono verificati es:
    Quante 'A' del Campo5 sono anche nel Campo6?E cosi per tutti i valori.

    Spero di essermi spiegato...
    Grazie mille...

  2. #2
    Da quello che ho capito vuoi fare una cosa del genere:


    A B1 B2...........
    A 2 1.....

    B1

    B2


    dove i valori di ogni riga solo quelli del campo5 e i valori di ogni colonna sono quelli del campo6 mentre l'elemento scritto nell'incrocio della i-sima riga con la j-sima colonna è il numero di elementi che avresti quando campo5 assume valore dato dall'etichetta della i-sima riga e campo6 valore dato dall'etichetta della j-sima colonna.
    Per intenderci il valore 1 che si trova all'incrocio tra A e B1 è il nr. di elementi nella tabella quando campo5='A' e campo6='B1'

    allora:

    $val_campo5 = array('A','B1','B2','C1','C2','D1')
    $val_campo6 = array('A','B1','B2','C1','C2','D1')
    $values[][] = array();

    foreach ($val_campo5 as $elem_riga)
    {
    foreach ($val_campo6 as $elem_colonna)
    {
    $sql = "SELECT count(*) as tot FROM canoni
    WHERE(Campo5 = \"" . $elem_riga . "\" AND Campo6 = \"" . $elem_colonna .
    "\" AND concat(Campo3, Campo4) <> \"B5\")";
    $esegui = @mysql_query(......);

    $riga = @mysql_fetch_assoc($esegui);
    $tot = $riga['tot'];

    $values[$elem_riga][$elem_colonna] = $tot;
    }
    }

    In tal modo $values non è altro che una matrice dove gli elementi di ciascuna riga rappresentano i valori assunti dal campo5 mentre gli elementi di ciascuna colonna i valori del campo6.

    Quindi ad es. $values['B1']['B2'] conterrà il nr. di record della tabella canoni quando campo5 assume valore 'B1' e campo6 valore 'B2'

  3. #3
    ti ringrazio, si in pratica è quello che volevo.
    Però il problema è che, non mi restituisce nesusn risultato nel senso.
    Ho stampato a video se effettivamente i valori vengono passati correnttamente all'interno della select, e fin qui tutto bene.
    Quello che non mi restituisce è l'effettivo valore restituito dalla stessa..
    in pratica facendo cosi:

    codice:
    foreach ($val_campo5 as $elem_riga){
    				foreach ($val_campo6 as $elem_colonna){
    					$sql = "SELECT count(*) as tot FROM canoni WHERE(Campo5 IN \"" . $elem_riga . "\" AND Campo6 IN \"" . $elem_colonna . "\" AND concat(Campo3, Campo4) <> \"B5\")";
    					echo "SQL: " . $sql . "
    
    ";
    					/*$sql = "SELECT count(*) as tot FROM canoni WHERE 
    							Campo5 IN ('A','B1','B2','B3','B4','C1','C2','C3','C4','C5','D1','D2','D3','E','E1','E2','E3','E4',
    										'E5','F','F1','F2','F3','F4','F5','F6','F7','G0','G2','G3') AND 
    							Campo6 IN (' A',' B1',' B2',' B3',' B4',' C1',' C2',' C3',' C4',' C5',' D1',' D2',' D3',' E',' E1',' E2',' E3',' E4',
    										' E5',' F',' F1',' F2',' F3',' F4',' F5',' F6',' F7',' G0',' G2',' G3') AND 
    							concat(Campo3, Campo4) <> 'B5'";*/
    					$esegui = @mysql_query($sql);
    					
    					$riga = @mysql_fetch_assoc($esegui);
    					$tot = $riga['tot'];
    					
    					$values[$elem_riga][$elem_colonna] = $tot;
    					echo "totale: " . $tot . "
    ";
    				}
    			}
    mi stampa soltanto totale, senza il valore che dovrebbe avere $tot..
    Sai per caso come mai?
    Grazie mille....

  4. #4
    Scusa ma perché hai scritto:

    Campo5 IN \"" . $elem_riga

    e non Campo5=

  5. #5
    Anche perché $elem_riga è solo un elemento dell'array non è tutto l'array.

  6. #6
    scusami, fermo fermo... ho capito come mai!!
    in pratica all'interno della select utilizzo l'operatore IN erroneamente, invece di '='.

    Ok sembra tutto risolto.
    Adesso altro Step altra difficoltà.
    Dovrei, strutturare una tabella in HTML, come un foglio excel con queste intestazioni
    A,B1,B2,B3,B4,C1 etc etc
    e poi dovrei avere una colonna in pratica cosi:

    ______A____B1_____B2_____B3______B4______C1______C 2______
    A
    __________________________________________________ _______
    B1
    __________________________________________________ _______
    B2
    __________________________________________________ _______
    B3
    __________________________________________________ _______

    spero di essermi spiegato.
    se puoi ancora...
    ti ringrazio davvero tanto

  7. #7
    Io farei in tal modo. Riepiloghiamo un pò di cose.

    In $val_campo5 abbiamo i valori del campo 5, mentre in $val_campo6 i valori del campo6 e in $values[][] il nr. di righe della tabella incrociando i valori di campo5 e campo6.

    Innanzitutto facciamo una piccola migliorìa.

    Anziché scrivere:

    $riga = @mysql_fetch_assoc($esegui);
    $tot = $riga['tot'];

    scriviamo:

    if ($riga = @mysql_fetch_assoc($esegui)) $tot = $riga['tot'])
    else $tot = 0;


    In pratica quello ke dobbiamo fare è costruirci, dinamicamente, una tabella

    $tabella =
    "
    <TABLE BORDER=\"0\" .......>
    <TR>
    <TD></TD>
    ";

    foreach ($val_campo6 as $elem_colonna)
    {
    $tabella .= "<TD WIDTH=\"15\">" . $elem_colonna . "</TD>";
    }

    $tabella .= "</TR>";

    A questo punto ci siamo creati la prima riga di intestazione della tabella:

    A____B1_____B2_____B3______B4______C1______C2_____

    Cioé i valori assunti dal campo 6



    foreach ($val_campo5 as $elem_riga)
    {
    $tabella .=
    "<TR>
    <TD>" . $elem_riga . "</TD>";

    foreach ($val_campo6 as $elem_colonna)
    {
    $tabella .= "<TD>" . $values[$elem_riga][$elem_colonna] . "</TD>";
    }

    $tabella .= "</TR>";
    }

    $tabella .= "</TABLE>";

    echo $tabella;


    Prova a vedere cosa esce a video.

  8. #8
    PERFETTISSIMO....ho dovuto fare una piccola modifichetta, per la creazione della tabella, perchè non mi stampava nulla.
    Ho dovuto farla a mano diciamo, ma adesso funziona tutto..!!!
    Alla grande.Ti ringrazio davvero tantissimo..

    Alla prox

  9. #9
    Ok.
    Ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.