Unire deglia rray bidiemnsionali

Monital

Utente Attivo
15 Apr 2009
778
2
18
Allora raga non soq aunte volte stavo aprendo una discussione per due cicli for un pò complessi ma poi tenta che tenta, ragionando che ragioanndo non ne avevo più bisogno.

Ora però mi sono infognato su una cosa un pò stupida ma penso si possa risolvere solo con la conoscenza e non con il ragionamento.

In sostanza uno di questi cicli foreach mi scansiona delle tabelle e mi crea dei multi array del tipo

PHP:
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
$sqlquery = "SELECT DISTINCT(nome) FROM ".$tab."";
$result = mysql_query($sqlquery)or die("ERROR".mysql_error());
if(mysql_num_rows($result)){
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 $id_nomi[$tab][]=$linea['nome'];
}

foreach($id_nomi as $key1=>$nomi) {	
foreach($nomi as $key=>$n) {	
$query = "SELECT SUM(number1) as nr1 FROM ".$tab." WHERE  nome='{$n}'";
$risultato = mysql_query($query) or die("Query 58: " . mysql_error() );
if($risultato) {
$row = mysql_fetch_array($risultato);
$tot_nr1[$key1][$n]= $row['nr1']; // <- qui hai il risultato che ti aspetti
}
$query = "SELECT SUM(number2) as nr2 FROM ".$tab." WHERE  nome='{$n}' ";
$risultato = mysql_query($query) or die("Query 58: " . mysql_error() );
if($risultato) {
$row = mysql_fetch_array($risultato);
$tot_nr2[$key1][$n]= $row['nr2']; // <- qui hai il risultato che ti aspetti
}
}
}
}

in sostanza ho un multi cosi formato


PHP:
array(4) { ["tabella1"]=> array(3) { ["pippo"]=> 10 ["Topolino"]=> 20 ["Pluto"]=> 30 } 
              ["tabella1"]=> array(3) { ["pippo"]=> 5["Topolino"]=> 10["Pluto"]=> 15 } 
              ["tabella2"]=> array(3) { ["paperino"]=> 10 ["gastone"]=> 20 ["paperoga"]=> 30 } 
              ["tabella2"]=> array(3) { ["paperino"]=> 5["gastone"]=> 10["paperoga"]=> 15 } 
//etc 

}

Come posso fare la somma dei valori nelle varie tabelle cosi da avere un unico array con le somme della tabella 1 e delle altre tabelle?

PHP:
array(2) { ["tabella1"]=> array(3) { ["pippo"]=> 15 ["Topolino"]=> 30 ["Pluto"]=> 45} 
              ["tabella2"]=> array(3) { ["paperino"]=> 15["gastone"]=> 30["paperoga"]=> 45} 
//etc 
}

thank
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se non ho capito male quello che vuoi fare, prova così
PHP:
<?php
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
	$sqlquery_1 = "SELECT SUM(number1) as somma_1, nome FROM $tab GROUP BY nome";
	$result_1 = mysql_query($sqlquery_1)or die("ERROR".mysql_error());
	if(mysql_num_rows($result_1)){
		while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 			$nome=$linea['nome']
			$tot_nr1[$tab][$nome]=$linea['somma_1'];
 		}
 	}
	$sqlquery_2 = "SELECT SUM(number2) as somma_2, nome FROM $tab GROUP BY nome";
	$result_2 = mysql_query($sqlquery_2)or die("ERROR".mysql_error());
	if(mysql_num_rows($result_2)){
		while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 			$nome=$linea['nome']
			$tot_nr2[$tab][$nome]=$linea['somma_2'];
 		}
 	}
}
echo "<pre>";
var_dump($tot_nr1, $tot_nr2);
echo "</pre>";
?>
forse puoi anche provare cosi, ma non so se funzi
PHP:
<?php
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
	$sqlquery = "SELECT SUM(number1) as somma_1, SUM(number2) as somma_2, nome FROM $tab GROUP BY nome";
	$result_1 = mysql_query($sqlquery)or die("ERROR".mysql_error());
	if(mysql_num_rows($result)){
		while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 			$nome=$linea['nome']
			$tot_nr1[$tab][$nome]=$linea['somma_1'];
			$tot_nr2[$tab][$nome]=$linea['somma_2'];
 		}
 	}
}
echo "<pre>";
var_dump($tot_nr1, $tot_nr2);
echo "</pre>";
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
allora borgo funzionano perfettamente entrambe, per quello che mi serve però preferisco la prima opzione e devo dire che rispetto al mio codice(che mi dava lo stesso risultato) il tuo è molto più snello e veloce ed anzi potrò adattarlo anche per altre porzioni.

Comodo il GROUP.

Però resto con lo stesso problema ossia la somma di $tot_nr1, e $tot_nr2

ovviamente dove $tab e $nome siano uguali,

ho provato con un if ma non ne vengo fuori.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
da quello che ho capito i nomi suno uguali nelle tabelle, se è così prova
PHP:
<?php
$tabelle_prova=array(tabella1,tabella2,tabella3);
foreach($tabelle_prove as $tab){
    $sqlquery_1 = "SELECT SUM(number1) as somma_1, nome FROM $tab GROUP BY nome";
    $result_1 = mysql_query($sqlquery_1)or die("ERROR".mysql_error());
    if(mysql_num_rows($result_1)){
        while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
             $nome=$linea['nome']
            $tot_nr1[$tab][$nome]=$linea['somma_1'];
			$tot[$nome]=$linea['somma_1'];//nel primo while solo l'uguale
         }
     }
    $sqlquery_2 = "SELECT SUM(number2) as somma_2, nome FROM $tab GROUP BY nome";
    $result_2 = mysql_query($sqlquery_2)or die("ERROR".mysql_error());
    if(mysql_num_rows($result_2)){
        while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
             $nome=$linea['nome']
            $tot_nr2[$tab][$nome]=$linea['somma_2'];
			$tot[$nome]+=$linea['somma_2'];//nei successivi while +=
         }
     }
}
echo "<pre>";
var_dump($tot_nr1, $tot_nr2, $tot);
echo "</pre>";
?>
dovrebbe funzionare anche se i nomi non sono tutti gli stessi
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
niet i nomi epr ogni tabella sono diversi

però per ogni tabella mi deve sommare i campi numer1 e number2

cmq provo e ti comunico l'esito
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Letto ora la tua risposta, ti spiego

l'array è composto cosi

PHP:
$tot_nr1=array(
[topolinia]=>{pippo=>1. topolino=>5,pluto=>10}
[paperopoli]=>{paperino=>1. paperone=>5,basettoni=>10}
);

$tot_nr2=array(
[topolinia]=>{pippo=>5. topolino=>15,pluto=>20}
[paperopoli]=>{paperino=>5. paperone=>15,basettoni=>20}
);

a me serviva rtaggiungere questo


PHP:
$tot=array(
[topolinia]=>{pippo=>6. topolino=>20,pluto=>30}
[paperopoli]=>{paperino=>6. paperone=>20,basettoni=>30}
);

quindi in pratica somarmi i due array dove la chiave principale era uguale ed i nomi uguali.
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
X unire più file in un pdf Windows e Software 2
rebeca Come Unire file PST in Uno? Windows e Software 0
Tommy03 Unire dati da due tabelle MySQL 5
K Unire più tabelle in una singola tabella PHP 3
F [PHP] Cercare voci uguali nel db e unire alcune variabili PHP 0
D [PHP] Unire 2 Array con ID in comune PHP 0
R unire 2 reti in una Adsl e Connettività 0
P Unire record Database 0
trattorino [PHP] unire due variabili PHP 0
trattorino [PHP] Unire a una query piu tabelle PHP 7
D unire due tabelle MySQL 1
S Unire due foreach simili PHP 5
D Unire campi PHP 2
P Unire il tasto submit anzicchè averlo in due file PHP 2
G Unire risultato di una select PHP 2
M Unire due modalità di pagina responsive in una... Javascript 0
I unire piu tabelle con gli stessi dati PHP 1
P Unire due funzioni... Javascript 1
felino [RISOLTO] [MySQL] Unire due tabelle esistenti in una nuova MySQL 1
M Unire piu funzioni di una classe PHP 12
criric Unire due array - array_merge() PHP 2
P Unire celle e righe in tabella HTML e CSS 0
G unire union e join insieme MySQL 7
P Unire, confrontare due tabelle da due db diversi fati in phpmyadmin Database 5
max_400 Unire 2 query - calcoli matematici: somma, moltiplicazione, percentuale PHP 7
I consiglio su come unire 2 codici? HTML e CSS 1
M Eliminare backup automatico e unire partizioni Hardware 0
R creazione carrello - unire sito al database PHP 14
T unire più campi e formare un link Database 0
L unire due pagine PHP 0
Z Unire i risultati di due Query PHP 3
X unire pagine php PHP 2
M X POLE e per chi si vuole unire Discussioni Varie 17
Cassandra Si possono unire più linguaggi? HTML e CSS 3

Discussioni simili