Dividere risultati in colonna in base al contenuto

  • Creatore Discussione Creatore Discussione Madera
  • Data di inizio Data di inizio

Madera

Nuovo Utente
25 Giu 2014
10
0
0
Ciao a tutti!
Avrei bisogno di qualche aiuto (sempre che si possa fare...) su questo mio problema:

Ho un file php che mi estrae i dati da un db mysql, inserendoli in un file di excel, e fino a qui nessun problema.

Il file mi crea un report di ordini del mio e-commerce fatti da alcuni utenti, in modo da visionare quanti ordini vengono fatti dagli stessi. Per farvi un esempio, il file risulta più o meno come sotto:

Operatore __ id Ordine __ Totale
Gino __ 10 __ € 5.00
Pino __ 11 __ € 7.00
Lino __ 12 __ € 4.00
e via dicendo...

Nel db mysql il campo "Operatore" viene compilato man mano che vengono fatti gli ordini, con il nome di chi ha fatto l'ordine

Mi chiedevo se fosse possibile dividere i risultati in colonne in base al nome dell'operatore per avere un report più ordinato. esempio.

Op. _ _ id _ _ Totale _ _ _ Op. _ _ id _ _ Totale _ _ _ Op. _ _ id _ _ Totale
Gino __ 10 __ € 5.00 _ _ _ Pino __ 11 __ € 7.00 _ _ _ Lino __ 12 __ € 4.00
Gino __ 14 __ € 5.00 _ _ _ Pino __ 13 __ € 7.00 _ _ _ Lino __ 15 __ € 4.00
Gino __ 18 __ € 5.00 _ _ _ Pino __ 17 __ € 7.00 _ _ _ Lino __ 19 __ € 4.00


Di seguito riporto il codice che sto usando ora:
PHP:
echo"<TABLE>";

while ($row= mysql_fetch_array($dati, MYSQL_ASSOC))	{	

$operatore = $row['Operatore'];
$id_ordine = $row['order_id'];
$data = $row['date_added'];	
	
	
	
echo"<tr>
	 <td>".$operatore."</td>
	 <td>".$id_ordine."</td>
	 <td>".$data."</td>";
echo "<td>";
echo sprintf ("%01.2f", round($row[total],2)); 
echo "</td>";
echo "</tr>";
	
}

echo"</TABLE>";


Se è una cosa che si può fare, c'è qualcuno che può darmi una mano?

Ringrazio tutti anticipatamente
 
Ultima modifica di un moderatore:
ciao
devi porera sulla query aggiungendo ORDER BY, es.
SELECT * FROM tabella ORDER BY nome_operatore, id_ordine
si intende che devi mettere i nomi dei campi che usi tu
 
Ultima modifica:
Grazie Borgo,
per l'ordine ok, ma quello che mi servirebbe, ovviamente se postille, è dividere il tutto in colonne (quindi non soltanto ordinato) in base all'operatore tipo lo "schemino" che ho fatto nel post precedente quindi diciamo:

Colonna 1 tutte le vendite fatte dall'operatore 1
Colonna 2 tutte le vendite fatte dall'operatore 2
Colonna 3 tutte le vendite fatte dall'operatore 3

e via dicendo...

Grazie mille per gli aiuti
 
ciao
vorresti una fare una cosa del genere?
tabella.jpg
se si devo pensarci, ma devi avere pazienza
 
Ciao Borgo,
esatto vorrei una cosa del genere. Non ho fretta, quindi quando hai del tempo da buttare... ;-) , se si riesce bene altrimenti pazienza.
Grazie mille della disponibilità!
 
Ciao Borgo,
adesso sono 8, non credo aumenteranno.
Grazie ancora della disponibilità!
 
Spero che a borgo non dispiaccia se ci metto del mio.
Non l'ho testato ma come logica dovremmo esserci ;)

PHP:
#> La userò come contenitore di tutti i dati
$tabella = array();

#> Scorro i record del db
while ($row = mysql_fetch_assoc($dati)) {    

    #> E' sempre bene fare un lavoro pulito inizializzando i vettori che stiamo per usare
    if (!isset($tabella[$row['Operatore']])) {
        $tabella[$row['Operatore']] = array();
    }
    
    #> E segnami quindi sotto l'operatore della vendita corrente i dati della riga
    $tabella[$row['Operatore']][] = $row;    
}

#> ..parlando di lavori puliti, il recordset di mysql non fa male liberarlo quando non è più utile:
mysql_free_result($dati);

#> Ordiniamo la lista degli operatori in ordine alfabetico
ksort($tabella);


#> Ok, adesso generiamo la tabella
echo "<table>";

#> Realizziamo la prima prima riga d'intestazione con i nomi degli operatori:
echo '<tr>';
$num_righe = 0;

foreach (array_keys($tabella) as $operatore) {
    echo "<td colspan=\"3\">{$operatore}</td>";

    #> nel mentre ci conviene anche sapere qual è il numero massimo di righe che dovremo inserire nella tabella
    if (count($tabella[$operatore]) > $num_righe) {
        $num_righe = count($tabella[$operatore]);
    }
}

echo '</tr>';

#> Ora provvediamo alla sottointestazione id-totale
echo '<tr>';
echo str_repeat('<td>id</td><td>data</td><td>totale</td>', count($tabella));
echo '</tr>';


#> Adesso tocca finalmente alle righe:
for ($i = 0; $i < $num_righe; ++$i) {
    echo '<tr>';
    
    foreach (array_keys($tabella) as $operatore) {
        #> Se esistono le informazioni che dobbiamo inserire in questa cella
        if (!empty($tabella[$operatore][$i])) {
            echo '<td>', $tabella[$operatore][$i]['order_id'], '</td>';
            echo '<td>', $tabella[$operatore][$i]['date_added'], '</td>';
            echo '<td>', number_format($tabella[$operatore][$i]['total'], 2, '.', ''), '</td>';
        
        #> Altrimenti celle vuote
        }else {
            echo str_repeat('<td></td>',3);
        }
    }

    echo '</tr>';
}

echo"</table>";
 
Ultima modifica:
Grazie Ragazzi!
Appena riesco provo e vi faccio sapere come è andata.
Per il momento grazie ancora
Buona serata
 

Discussioni simili