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