collegandomi ad un precedente 3d (risolto grazie a filippo.toso
) ho scoperto che per costruire una parte di un gestionale vengono eseguite circa 30 query
codice php (incasinatissimo)
Codice PHP:
function zoneDB($lingua){
$Azone = array("PID" => array(), "PNM" => array(), "CID" => array(), "CNM" => array(), "LID" => array(), "LNM" => array());
$sql = '';
$ord = '';
$TG = "B";
$whe = " WHERE tipo='PA' and ass='$TG' and stato>0";
$con = xapricon();
$sql = "SELECT ID_zona, nome FROM zone";
$ord = " order by nome";
$rec2 = '';
$rec1 = '';
$rec0 = xquery($sql.$whe.$ord);
$totrec = mysql_num_rows($rec0);
while($riga0 = mysql_fetch_assoc($rec0)){
$whe = " WHERE ID_rife='".$riga0['ID_zona']."' and tipo='CG' and ass='$TG' and stato>0";
$rec1 = xquery($sql.$whe.$ord);
$totrec = mysql_num_rows($rec1);
if($totrec>0){
while($riga1 = mysql_fetch_assoc($rec1)){
$whe = " WHERE ID_rife='".$riga1['ID_zona']."' and tipo='LU' and ass='$TG' and stato>0";
$rec2 = xquery($sql.$whe);
$totrec = mysql_num_rows($rec2);
if($totrec>0){
while($riga2 = mysql_fetch_assoc($rec2)){
array_push($Azone['PID'], $riga0['ID_zona']);
array_push($Azone['PNM'], $riga0['nome']);
array_push($Azone['CID'], $riga1['ID_zona']);
array_push($Azone['CNM'], $riga1['nome']);
array_push($Azone['LID'], $riga2['ID_zona']);
array_push($Azone['LNM'], $riga2['nome']);
}
} else {
array_push($Azone['PID'], $riga0['ID_zona']);
array_push($Azone['PNM'], $riga0['nome']);
array_push($Azone['CID'], $riga1['ID_zona']);
array_push($Azone['CNM'], $riga1['nome']);
array_push($Azone['LID'], 0);
array_push($Azone['LNM'], 0);
}
}
} else {
array_push($Azone['PID'], $riga0['ID_zona']);
array_push($Azone['PNM'], $riga0['nome']);
array_push($Azone['CID'], 0);
array_push($Azone['CNM'], 0);
array_push($Azone['LID'], 0);
array_push($Azone['LNM'], 0);
}
}
$fre = xchiudicon($rec0,$con);
if(!empty($rec1)){
}
if(!empty($rec2)){
$fre = xchiudicon($rec2,$con);
}
return $Azone;
}
il risultato di questa operazione è una cosa del genere
Codice PHP:
Array
(
[PID] => Array
(
[0] => 73
[1] => 73
[2] => 73
[3] => 73
[4] => 72
[5] => 71
[6] => 71
[7] => 71
[8] => 71
[9] => 71
[10] => 71
[11] => 71
[12] => 71
[13] => 71
[14] => 71
[15] => 71
[16] => 71
[17] => 71
[18] => 71
[19] => 70
[20] => 70
[21] => 70
[22] => 35
)
[PNM] => Array
(
[0] => Categoria A + 60 metri
[1] => Categoria A + 60 metri
[2] => Categoria A + 60 metri
[3] => Categoria A + 60 metri
[4] => Categoria B da 40 a 60 mt
[5] => Categoria C da 20 a 40 mt
[6] => Categoria C da 20 a 40 mt
[7] => Categoria C da 20 a 40 mt
[8] => Categoria C da 20 a 40 mt
[9] => Categoria C da 20 a 40 mt
[10] => Categoria C da 20 a 40 mt
[11] => Categoria C da 20 a 40 mt
[12] => Categoria C da 20 a 40 mt
[13] => Categoria C da 20 a 40 mt
[14] => Categoria C da 20 a 40 mt
[15] => Categoria C da 20 a 40 mt
[16] => Categoria C da 20 a 40 mt
[17] => Categoria C da 20 a 40 mt
[18] => Categoria C da 20 a 40 mt
[19] => Categoria D - 20 metri
[20] => Categoria D - 20 metri
[21] => Categoria D - 20 metri
[22] => Italia
)
[CID] => Array
(
[0] => 74
[1] => 76
[2] => 77
[3] => 113
[4] => 86
[5] => 92
[6] => 89
[7] => 80
[8] => 121
[9] => 121
[10] => 87
[11] => 119
[12] => 91
[13] => 88
[14] => 82
[15] => 81
[16] => 83
[17] => 83
[18] => 105
[19] => 126
[20] => 124
[21] => 90
[22] => 0
)
[CNM] => Array
(
[0] => Mega yacht
[1] => Mega yacht
[2] => Mega yacht
[3] => Mega yacht
[4] => Benetti
[5] => Azimut
[6] => Canados
[7] => Cerri Cantieri navali
[8] => Dominator
[9] => Dominator
[10] => Ferretti
[11] => Hatteras
[12] => Leopard
[13] => Maiora
[14] => Overmarine
[15] => Pershing
[16] => San Lorenzo
[17] => San Lorenzo
[18] => Tecnomar
[19] => Azimut
[20] => Dominator
[21] => Ferretti
[22] => 0
)
[LID] => Array
(
[0] => 75
[1] => 93
[2] => 94
[3] => 114
[4] => 102
[5] => 110
[6] => 107
[7] => 96
[8] => 122
[9] => 123
[10] => 103
[11] => 120
[12] => 109
[13] => 104
[14] => 100
[15] => 97
[16] => 101
[17] => 118
[18] => 106
[19] => 127
[20] => 125
[21] => 108
[22] => 0
)
[LNM] => Array
(
[0] => 18 Cabine
[1] => 18 Cabine
[2] => 18 Cabine
[3] => 18 Cabine
[4] => 6 Cabine
[5] => 4 cabine
[6] => 5 Cabine
[7] => 5 Cabine
[8] => 4 cabine
[9] => 3 Cabine
[10] => 4 cabine
[11] => 4 Cabine
[12] => 3 Cabine
[13] => 3 Cabine
[14] => 5 Cabine
[15] => 4 cabine
[16] => 5 Cabine
[17] => 4 Cabine
[18] => 4 cabine
[19] => 2 Cabine
[20] => 3 Cabine
[21] => 3 Cabine
[22] => 0
)
)
ora, siccome questa elaborazione richiede circa 30 query io sto cercando di ottimizzare la costruzione di questo array... sto provando a fare une left join sulla stessa tabella, ma non riesco a venirne a capo.
questa invece è la sequenza di query che vengono eseguite per costruire quell'array
codice:
SELECT ID_zona, nome FROM zone WHERE tipo='PA' and ass='B' and stato>0 order by nome
SELECT ID_zona, nome FROM zone WHERE ID_rife='73' and tipo='CG' and ass='B' and stato>0 order by nome
SELECT ID_zona, nome FROM zone WHERE ID_rife='74' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='76' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='77' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='113' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='72' and tipo='CG' and ass='B' and stato>0 order by nome
SELECT ID_zona, nome FROM zone WHERE ID_rife='86' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='71' and tipo='CG' and ass='B' and stato>0 order by nome
SELECT ID_zona, nome FROM zone WHERE ID_rife='92' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='89' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='80' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='121' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='87' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='119' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='91' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='88' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='82' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='81' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='83' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='105' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='70' and tipo='CG' and ass='B' and stato>0 order by nome
SELECT ID_zona, nome FROM zone WHERE ID_rife='126' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='124' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='90' and tipo='LU' and ass='B' and stato>0
SELECT ID_zona, nome FROM zone WHERE ID_rife='35' and tipo='CG' and ass='B' and stato>0 order by nome
SELECT * FROM prodotti WHERE tipo='YA' and stato > 0 order by ordinamento, titolo
qualche aiutino per costruire quell'array con 1/2 query? Ove fosse possibile, ovviamente.. 
posso solo immaginare che sia complesso per voi
anche solo capire il codice, se necessario sono disposto a fare altre spiegazioni più dettagliate, basta chiedere
se qualcuno ha pazienza per mettermi sulla strada giusta