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

    [Mysql] trasformare "righe in colonne"

    Ho un db mysql in questo modo che vorrei trasformare...

    codice:
    id	data		periodo	valuta	metallo	valore
    1	2/2/2011	Morning	USD		Gold		1337
    2	2/1/2011	Evening	USD		Silver		28.32
    3	2/2/2011	Morning	USD		Platinum	1830
    4	2/2/2011	Morning	USD		Palladium	823
    5	2/2/2011	Morning	EURO		Gold		966.529
    6	2/1/2011	Evening	EURO		Silver		20.5739
    7	2/2/2011	Morning	EURO		Platinum	1324.15
    8	2/2/2011	Morning	EURO		Palladium	595.500
    9	2/2/2011	Morning	GBP		Gold		824.291
    10	2/1/2011	Evening	GBP		Silver		17.5791
    11	2/2/2011	Morning	GBP		Platinum	1129.65
    12	2/2/2011	Morning	GBP		Palladium	508.00

    codice:
    Gold		EUR			USD			GBP
    Morning		966.529			1337			824.291
    Evening		(se presenti)
    
    Silver		EUR		USD		GBP
    Morning	966.529	1337		824.291
    Evening	(se presenti)
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select metallo,periodo,data,
    sum(if(valuta='euro', valore,null)) as euro,
    sum(if(valuta='usd', valore,null)) as usd,
    sum(if(valuta='gbp', valore,null)) as gbp
    from tabella
    group by metallo,data,periodo
    order by data,metallo,if(periodo='morning',0,1)

  3. #3
    Scusa ma SUM che fa? A me pare pare che stia sommando i valori... invece deovrebbe mostrare quello della data più recente
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  4. #4
    In pratica questa è la mia tabella ... e due volte al giorno vengono aggiunti (credo) 12 record coi nuovi valori
    Immagini allegate Immagini allegate
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  5. #5
    Ho provato questo codice (togliendo il SUM e il GROUP per vedere se capivo meglio):
    codice:
    $q_fix_rec = "
    	SELECT *,
    	IF(valuta='USD', valore, NULL) AS usd,
    	IF(valuta='EURO', valore, NULL) AS euro,
    	IF(valuta='GBP', valore, NULL) AS gbp
    	FROM Tabella
    	order by id DESC
    	";
    $result = mysql_query($q_fix_rec);
    echo "<table border=1>
    		<tr>
    			<th>id</th>
    			<th></th>
    			<th></th>
    			<th></th>
    			<th>usd</th>
    			<th>euro</th>
    			<th>gbp</th>
    		</tr>
    ";
    while ($row = mysql_fetch_array($result)) 
    {
    	echo "
    	<tr>
    		<td>$row[id]</td>
    		<td>$row[metallo]</td>
    		<td>$row[data]</td>
    		<td>$row[periodo]</td>
    		<td>$row[usd]</td>
    		<td>$row[euro]</td>
    		<td>$row[gbp]</td>
    	</tr>";
    	
    }
    echo "</table>";
    Il risultato (se aggiungo LIMIT 12 ... ma non so se è corretto) è una cosa del genere:
    Immagini allegate Immagini allegate
    Fantasupermegafavolipermeramagicultra irresistibili
    4 10 30 100 1001 personaggi insuperabili fantaincredibili ultraimpossibili iperterribili irresistibili!!!

    "... a quell'età ... bastava un dito per fare la pace ..."
    fotine

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da ricman
    Scusa ma SUM che fa? A me pare pare che stia sommando i valori... invece deovrebbe mostrare quello della data più recente
    Se i valori sono unici come dovrebbero essere, cioè ad ogni metallo in una determinata data e in un determinato periodo (mattino o pomeriggio) è associata un'unica quotazione la logica della query che ti ho scritto è corretta. La funzione sum() restituirà semplicemente il valore e permetterà di fare la trasposizione da righe a colonne.

    Se ti serve ulteriore aiuto, anzichè allegare immagini, posta un dump esemplificativo col risultato atteso.

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.