velocizzare tempi di interrogazioni dati di un database tramite query lanciata da php e jquery

ans66

Utente Attivo
27 Ago 2011
158
0
16
database.jpgNon riesco a trovare un sistema per abbattere il più possibile i tempi di interrogazione dati di un database ( le tabelle sono normalizzate) che viene interrogato da script jquery e php:

Codice:
<?php
session_start(); // this MUST be called prior to any output including whitespaces and line breaks!
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Database</title>
<link href="jquery-ui.css" rel="stylesheet">

<!-- InstanceEndEditable --> 
<link href="./css/tabelle.css" rel="stylesheet" type="text/css" />
<script src="jquery-1.11.1.js"></script>
<style type="text/css">

body {
  color: #333333;
  font-family: 'Helvetica', arial;
}
.wrap {
  padding: 40px;
  text-align: center;
}
hr {
  clear: both;
  margin-top: 40px;
  margin-bottom: 40px;
  border: 0;
  border-top: 1px solid #aaaaaa;
}
h1 {
  font-size: 30px;
  margin-bottom: 40px;
}
p {
  margin-bottom: 20px;
}
.btn {
  background: #8C9AA6;
  border: #357ebd solid 1px;
  border-radius: 3px;
  color: #fff;
  display: inline-block;
  font-size: 14px;
  padding: 8px 15px;
  text-decoration: none;
  text-align: center;
  min-width: 60px;
  position: relative;
  transition: color .1s ease;
}
.btn:hover {
  background: #357ebd;
}
.btn.btn-big {
  font-size: 18px;
  padding: 15px 20px;
  min-width: 100px;
}
.btn-close {
  color: #aaaaaa;
  font-size: 30px;
  text-decoration: none;
  position: absolute;
  right: 5px;
  top: 0;
}
.btn-close:hover {
  color: #919191;
}
.modal:before {
  content: "";
  display: none;
  background: rgba(0, 0, 0, 0.6);
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 10;
}
.modal:target:before {
  display: block;
}
.modal:target .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  transform: translate(0, 0);
  top: 20%;
}
.modal-dialog {
  background: #fefefe;
  border: #333333 solid 1px;
  border-radius: 5px;
  margin-left: -200px;
  position: fixed;
  left: 50%;
  top: -100%;
  z-index: 11;
  width: 360px;
  -webkit-transform: translate(0, -500%);
  -ms-transform: translate(0, -500%);
  transform: translate(0, -500%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal-body {
  padding: 20px;
}
.modal-header,
.modal-footer {
  padding: 10px 20px;
}
.modal-header {
  border-bottom: #eeeeee solid 1px;
}
.modal-header h2 {
  font-size: 20px;
}
.modal-footer {
  border-top: #eeeeee solid 1px;
  text-align: right;
}
</style>


<script type="text/javascript">

	$(document).ready(function(){  
     
		var scegli = '<option value="0">Scegli...</option>';
		var attendere = '<option value="0">Attendere...</option>';
		
		$("select#Diametro").html(scegli);
		$("select#Diametro").attr("disabled", "disabled");
    $("select#TipoSupporto").html(scegli);
		$("select#TipoSupporto").attr("disabled", "disabled");
    $("select#TipoLamiera").html(scegli);
		$("select#TipoLamiera").attr("disabled", "disabled");
    $("select#TipoPavimenti").html(scegli);
		$("select#TipoPavimenti").attr("disabled", "disabled");
		$("select#volvenza").html(scegli);
		$("select#volvenza").attr("disabled", "disabled");
    $("select#TipoRuota").html(scegli);
		$("select#TipoRuota").attr("disabled", "disabled");	  
    $("select#Portata").html(scegli);
		$("select#Portata").attr("disabled", "disabled");
    $("select#SerieSupporti").html(scegli);
		$("select#SerieSupporti").attr("disabled", "disabled");
    $("select#SerieSupporti").html(scegli);
		$("select#SerieSupporti").attr("disabled", "disabled");	  
    
    $("select#applicazione").change(function(){
			var applic = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      
            
      // comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};
      
			$("select#Diametro").html(attendere);
			$("select#Diametro").attr("disabled", "disabled");
			
			
			$.post("select.php", {id:applic,id2:comeR}, function(data){
              
				$("select#Diametro").removeAttr("disabled"); 
				$("select#Diametro").html(data);
        
        	
			});
      
         
		});	
    
    
    $("select#applicazione").change(function(){
    
      var app = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      if (comeR==0){comeR=3};
      
      $("select#TipoSupporto").html(attendere);
			$("select#TipoSupporto").attr("disabled", "disabled");
      
			$.post("select2.php", {id:app,id2:comeR}, function(data){
      
				$("select#TipoSupporto").removeAttr("disabled"); 
				$("select#TipoSupporto").html(data);
              	
			});
      
         
		});	
    
   $("select#applicazione").change(function(){
    
      var app = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      if (comeR==0){comeR=3};
      
      
      $("select#TipoLamiera").html(attendere);
			$("select#TipoLamiera").attr("disabled", "disabled");
      
			$.post("select5.php", {id:app,id2:comeR}, function(data){
      
				$("select#TipoLamiera").removeAttr("disabled"); 
				$("select#TipoLamiera").html(data);
              	
			});
      
         
		});	
    
  $("select#applicazione").change(function(){
    
      var app = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      if (comeR==0){comeR=3};
      
      
      $("select#TipoPavimenti").html(attendere);
			$("select#TipoPavimenti").attr("disabled", "disabled");
      
           
			$.post("select9.php", {id:app,id2:comeR}, function(data){
      
				$("select#TipoPavimenti").removeAttr("disabled"); 
				$("select#TipoPavimenti").html(data);
              	
			});
      
         
		});	
    
   $("select#applicazione").change(function(){
    
      var app = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      if (comeR==0){comeR=3};
      
      
      $("select#volvenza").html(attendere);
			$("select#volvenza").attr("disabled", "disabled");
      
			$.post("select7.php", {id:app,id2:comeR}, function(data){
      
				$("select#volvenza").removeAttr("disabled"); 
				$("select#volvenza").html(data);
              	
			});
      
         
		});	
    
  $("select#applicazione").change(function(){
    
      var app = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      if (comeR==0){comeR=3};
      
      
      $("select#TipoRuota").html(attendere);
			$("select#TipoRuota").attr("disabled", "disabled");
      
			$.post("select11.php", {id:app,id2:comeR}, function(data){
      
				$("select#TipoRuota").removeAttr("disabled"); 
				$("select#TipoRuota").html(data);
              	
			});
      
         
		});	
    
  $("select#applicazione").change(function(){
    
      var app = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      if (comeR==0){comeR=3};
      
      
      $("select#Portata").html(attendere);
			$("select#Portata").attr("disabled", "disabled");
      
			$.post("select13.php", {id:app,id2:comeR}, function(data){
      
				$("select#Portata").removeAttr("disabled"); 
				$("select#Portata").html(data);
              	
			});
      
         
		});	
    
    
 $("select#applicazione").change(function(){
    
      var app = $("select#applicazione option:selected").attr('value');
      var comeR = $("select#comeRuota option:selected").attr('value');
      if (comeR==0){comeR=3};
      
      
      $("select#SerieSupporti").html(attendere);
			$("select#SerieSupporti").attr("disabled", "disabled");
      
			$.post("select15.php", {id:app,id2:comeR}, function(data){
      
				$("select#SerieSupporti").removeAttr("disabled"); 
				$("select#SerieSupporti").html(data);
              	
			});
      
         
		});	
    

  $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#Diametro").html(attendere);
			$("select#Diametro").attr("disabled", "disabled");
			
			
			$.post("select3.php", {id:applic,id2:comeR}, function(data){
      
				$("select#Diametro").removeAttr("disabled"); 
				$("select#Diametro").html(data);
        	
			});
      
         
		});	
    
  
  $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#TipoSupporto").html(attendere);
			$("select#TipoSupporto").attr("disabled", "disabled");
			
			
			$.post("select4.php", {id:applic,id2:comeR}, function(data){
      
				$("select#TipoSupporto").removeAttr("disabled"); 
				$("select#TipoSupporto").html(data);
        	
			});
      
         
		});	
  
  $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#TipoLamiera").html(attendere);
			$("select#TipoLamiera").attr("disabled", "disabled");
			
			
			$.post("select6.php", {id:applic,id2:comeR}, function(data){
      
				$("select#TipoLamiera").removeAttr("disabled"); 
				$("select#TipoLamiera").html(data);
        	
			});
      
         
		});
    
  $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#TipoPavimenti").html(attendere);
			$("select#TipoPavimenti").attr("disabled", "disabled");
			
			
			$.post("select10.php", {id:applic,id2:comeR}, function(data){
      
				$("select#TipoPavimenti").removeAttr("disabled"); 
				$("select#TipoPavimenti").html(data);
        	
			});
      
         
		});   
    	
    
  $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#volvenza").html(attendere);
			$("select#volvenza").attr("disabled", "disabled");
			
			
			$.post("select8.php", {id:applic,id2:comeR}, function(data){
      
				$("select#volvenza").removeAttr("disabled"); 
				$("select#volvenza").html(data);
        	
			});
      
         
		});
    
    
   $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#TipoRuota").html(attendere);
			$("select#TipoRuota").attr("disabled", "disabled");
			
			
			$.post("select12.php", {id:applic,id2:comeR}, function(data){
      
				$("select#TipoRuota").removeAttr("disabled"); 
				$("select#TipoRuota").html(data);
        	
			});
      
         
		});
    
   $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#Portata").html(attendere);
			$("select#Portata").attr("disabled", "disabled");
			
			
			$.post("select14.php", {id:applic,id2:comeR}, function(data){
      
				$("select#Portata").removeAttr("disabled"); 
				$("select#Portata").html(data);
        	
			});
      
         
		});
  
  
  $("select#comeRuota").change(function(){
			var comeR = $("select#comeRuota option:selected").attr('value');
      var applic = $("select#applicazione option:selected").attr('value');
      
      
      // applicazione non scelto è di default Collettività
      if(applic==0) {applic=1};
      
			$("select#SerieSupporti").html(attendere);
			$("select#SerieSupporti").attr("disabled", "disabled");
			
			
			$.post("select16.php", {id:applic,id2:comeR}, function(data){
      
				$("select#SerieSupporti").removeAttr("disabled"); 
				$("select#SerieSupporti").html(data);
        	
			});
      
         
		});
    
  
  $("select#comeRuota").change(function(){
var comeR = $("select#comeRuota option:selected").attr('value');
var ap = $("select#applicazione option:selected").attr('value');

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};

$.post("count.php", {id:ap,id2:comeR}, function(data){
$("#result").html(data);

      });

      });
      
  $("select#applicazione").change(function(){
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

if (comeR==0){comeR=3};

$.post("count.php", {id:ap,id2:comeR}, function(data){
$("#result").html(data);

      });

      });
      
 $("select#Diametro").change(function(){
var diam = $("select#Diametro option:selected").text();
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};
      
// comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};


$.post("count2.php", {id:ap,id2:comeR,dmt:diam}, function(data){
$("#result").html(data);

      });

      });
      
 $("select#TipoSupporto").change(function(){
var sup = $("select#TipoSupporto option:selected").text(); 
var diam = $("select#Diametro option:selected").text();
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

if(diam=='scegli...') {diam=""};

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};
      
// comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};


$.post("count3.php", {id:ap,id2:comeR,dmt:diam,suppt:sup}, function(data){
$("#result").html(data);

      });

      });
      
 $("select#TipoLamiera").change(function(){
var lam = $("select#TipoLamiera option:selected").text();
var sup = $("select#TipoSupporto option:selected").text(); 
var diam = $("select#Diametro option:selected").text();
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

if(diam=='scegli...') {diam=""};
if(sup=='scegli...') {sup=""};

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};
      
// comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};


$.post("count4.php", {id:ap,id2:comeR,dmt:diam,suppt:sup,lamier:lam}, function(data){
$("#result").html(data);

      });

      });
      

 $("select#volvenza").change(function(){
var volv = $("select#volvenza option:selected").text(); 
var lam = $("select#TipoLamiera option:selected").text();
var sup = $("select#TipoSupporto option:selected").text(); 
var diam = $("select#Diametro option:selected").text();
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

if(diam=='scegli...') {diam=""};
if(sup=='scegli...') {sup=""};
if(lam=='scegli...') {lam=""};

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};
      
// comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};


$.post("count5.php", {id:ap,id2:comeR,dmt:diam,suppt:sup,lamier:lam,vol:volv}, function(data){
$("#result").html(data);

      });

      });
      
  $("select#TipoRuota").change(function(){
var TipoR = $("select#TipoRuota option:selected").text();  
var volv = $("select#volvenza option:selected").text(); 
var lam = $("select#TipoLamiera option:selected").text();
var sup = $("select#TipoSupporto option:selected").text(); 
var diam = $("select#Diametro option:selected").text();
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

if(diam=='scegli...') {diam=""};
if(sup=='scegli...') {sup=""};
if(lam=='scegli...') {lam=""};
if(volv=='scegli...') {volv=""};

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};
      
// comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};


$.post("count6.php", {id:ap,id2:comeR,dmt:diam,suppt:sup,lamier:lam,vol:volv,Ruot:TipoR}, function(data){
$("#result").html(data);

      });

      });
      
      
  $("select#Portata").change(function(){
var Port = $("select#Portata option:selected").text();  
var TipoR = $("select#TipoRuota option:selected").text();  
var volv = $("select#volvenza option:selected").text(); 
var lam = $("select#TipoLamiera option:selected").text();
var sup = $("select#TipoSupporto option:selected").text(); 
var diam = $("select#Diametro option:selected").text();
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

if(TipoR=='scegli...') {TipoR=""};
if(diam=='scegli...') {diam=""};
if(sup=='scegli...') {sup=""};
if(lam=='scegli...') {lam=""};
if(volv=='scegli...') {volv=""};

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};
      
// comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};


$.post("count7.php", {id:ap,id2:comeR,dmt:diam,suppt:sup,lamier:lam,vol:volv,Ruot:TipoR,por:Port}, function(data){
$("#result").html(data);

      });

      });
      
      
 $("select#SerieSupporti").change(function(){
var Series = $("select#SerieSupporti option:selected").text(); 
var Port = $("select#Portata option:selected").text();  
var TipoR = $("select#TipoRuota option:selected").text();  
var volv = $("select#volvenza option:selected").text(); 
var lam = $("select#TipoLamiera option:selected").text();
var sup = $("select#TipoSupporto option:selected").text(); 
var diam = $("select#Diametro option:selected").text();
var ap = $("select#applicazione option:selected").attr('value');
var comeR = $("select#comeRuota option:selected").attr('value');

if(Port=='scegli...') {Port=""};
if(TipoR=='scegli...') {TipoR=""};
if(diam=='scegli...') {diam=""};
if(sup=='scegli...') {sup=""};
if(lam=='scegli...') {lam=""};
if(volv=='scegli...') {volv=""};

// applicazione non scelto è di default Collettività
      if(ap==0) {ap=1};
      
// comeruota non scelta è di default Ruota montata
      if (comeR==0){comeR=3};


$.post("count8.php", {id:ap,id2:comeR,dmt:diam,suppt:sup,lamier:lam,vol:volv,Ruot:TipoR,por:Port,seriesup:Series}, function(data){
$("#result").html(data);

      });

      });
 

   
		 		
	});

// cerca codice  
function Cerca() {
  
  var risp=window.prompt("Codice da cercare?","");
  if(risp === null) 
  { alert("non hai digitato nulla!");    }
  else if (risp=="") { alert("non hai digitato nulla!");    } 
  else
  { window.location='cerca.php?cod='+risp; } 
  
  
  return "0";  }
	
	</script>   

</head>
<body>
 <?php
include_once 'select.class.php';
$opt = new SelectList();
?> 
 

<div class="contenitore_tabella">                                                     
    <table width="900" border="0">
    <form id="myForm" action="ruote_email.php" method="POST" >
          <thead>
      <tr>
              <th ><div align="right">Scegli la ruota che preferisci</div><th>/ Choose your favourite castor 
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              Nr. Record:<label id="result"> </div>  
              </th></th>
            </tr>
        </thead>
          <tbody>
            

            
<!-- Ruota montata:   -->
            
            
                     
            
              <!-- Combo -->
              <tr>
              <tr>
              <td >
              Applicazione/Application: 
              <select id="applicazione" name="applicazione">
              <?php echo $opt->ShowApplicazioni(); ?>
              </select> 
              </td>
              
              <td >
              
                          
              Volvenza/Bearing: 
              <select id="volvenza" name="volvenza">
              <option>Scegli...</option>
			        </select>
              </td>
              
        </tr>   
              <td >
              <div >Come Ruota/How is the wheel?:
              <select id="comeRuota" name="comeRuota">
              <?php echo $opt->ShowComeRuota(); ?>
              </select></div>
              </td>
              
              <td>
              <div> Ruota/Wheel?: 
              <select id="TipoRuota" name="TipoRuota">
              <option>Scegli...</option>
              </select></div>
              </td>
              
       </tr>
       
       <tr>
              <td height="50">
               Diametro/Diameter:
               <select id="Diametro" name="Diametro">
               <option>Scegli...</option>
               </select>
               
               </td>
              
              <td height="50">
              Portata/Carrying Capacity:
              <select id="Portata" name="Portata">
              <option>Scegli...</option>
              </select> 
              </td>
              
        </tr>
        <tr>
              
          
              <td height="50">
              Supporto/Housing:  
              <select id="TipoSupporto" name="TipoSupporto">
              <option>Scegli...</option>
              </select>
              </td>
              
               
              
              <td >
              <div >Serie Supporti/Housing Series:
              <select id="SerieSupporti" name="SerieSupporti">
              <option>Scegli...</option>
              </select></div>
              </td>
              
        </tr>
        <tr>
              <td height="50">
               Tipo Lamiera/Metal Sheet:
                <select id="TipoLamiera" name="TipoLamiera">
                <option>Scegli...</option>
               </select>
              </td>
              
              <td height="50">
              
              </td>
              
        </tr>      
        <tr>
              <td >
              <div > Tipi Pavimenti/Which Floor?: 
              <select id="TipoPavimenti" name="TipoPavimenti">
              <option>Scegli...</option>
              </select></div>
              </td>
              
              <td height="50">
              <div align="left"><input type="submit" value="Invia/Submit" /></div>
              </td>
              
        </tr> 
        </th>         
            
          </tbody>
       
       </form>
       <td ></td><td style="vertical-align:bottom; text-align:center; ">Ricerca per codice:
       <?php include 'myinputbox.php'; ?> 
       </td>       
         
        
<!-- Modal -->
<div class="modal" id="modal-one" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-header">
      <h2>Non hai inserito il Codice</h2>
      <a href="#" class="btn-close" aria-hidden="true">!</a>
    </div>
    <div class="modal-body">
      <p>Codice non inserito!</p>
    </div>
    <div class="modal-footer">
      <a href="#" class="btn">|||</a>
    </div>
  </div>
</div>
<!-- /Modal -->



              
        </table>
        
  <p>&nbsp;</p>
</div>
 
    
</body> 
</html>

salto il php che include la classe prevista nel file select.php perché si tratta solo di un file di richiamo

file select.php:
PHP:
<?php

class SelectList
{

function ContaNrRec ($res)
{

$num = mysql_num_rows($res);
return $num;


}

public function CalcolaNrRcAp ()
{

//$qry="Select cercaruota.trovaruota.codice From cercaruota.trovaruota Where cercaruota.trovaruota.industriale =";
$qry="Select count(*) From cercaruota.trovaruota Where cercaruota.trovaruota.industriale =";


// 2, nella tabela applicazione del db Form, significa Industria, 1 significa Collettività, 0 che vuol dire non scelto
// è Collettività per default per cui diverso da 2. 
if ($_POST['id']<>2) 
{  
 $qry=$qry."0";
} 

if ($_POST['id']==2) 
{  
$qry=$qry."1";
}

switch ($_POST['id2']) {
    case 0:
    case 3:
    // case 0: nessuna scelta per cui default  ruota montata - $qry non cambia
    // case 3: ruota montata per cui $qry non cambia  
    break;
    case 2: 
    $qry=$qry." And cercaruota.trovaruota.tiporuotaid = 13";
    // case 2: solo supporto $qry + tiporuota = 13 che vuol dire nessuna ruota
    break;
    case 1:
    $qry=$qry." And cercaruota.trovaruota.tiposupportoid = 16";
    // case 3: solo ruota $qry + tiposupportoid = 16 che vuol dire nessun supporto
    break;
                        }
                        


$nuovaqry=""; 
if (!empty($_POST['dmt']) && $_POST['dmt']<>'scegli...' )
{

//Select cercaruota.trovaruota.codice From cercaruota.trovaruota Where cercaruota.trovaruota.industriale =

$divisoxspazio = explode(" ", $qry);
// numero parole divise per spazio nella stringa (nr indici nell'array)
$nrArr=count($divisoxspazio);

//Select cercaruota.trovaruota.codice From cercaruota.trovaruota
$nuovaqry=$divisoxspazio[0]." ".$divisoxspazio[1]." ".$divisoxspazio[2]." ".$divisoxspazio[3];

$nuovaqry=$nuovaqry." Inner Join diametro On trovaruota.diametroid = diametro.iddiametro";

for( $i=4; $i<$nrArr; $i++ )
{
$nuovaqry=$nuovaqry." ".$divisoxspazio[$i];
}
// campo diametrocerca = al campo diametro di cercaruota trovo diametrocerca
$queryform="Select distinct diametro.diametrocerca From  diametro Where diametro.diametro = '".$_POST['dmt']."'";
$rit=$this->connDatabase($queryform);
$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }

// $dataset[0][0] è contenuto diametrocerca
$nuovaqry=$nuovaqry." And diametro.diametro = '".$dataset[0][0]."'";

// quando ho creato query per tabelle correlate passo il valore della $nuovaquery a $qry
$qry=$nuovaqry;
 
}

$nuovaqry=""; 
if (!empty($_POST['suppt']) && $_POST['suppt']<>'scegli...')
{

// rendi minuscola la query                          
$nuovaqry=strtolower($qry);
$doveWhere=strpos($nuovaqry, "where");

// query fino a prima di Where
$str=substr($nuovaqry,0,$doveWhere);

// aggiungo Inner Join
$str=$str."Inner Join cercaruota.tiposupporto On cercaruota.trovaruota.tiposupportoid = cercaruota.tiposupporto.idtiposupporto ";

// aggiungo l'ultima parte
$str=$str.substr($nuovaqry,$doveWhere);


// campo diametrocerca = al campo diametro di cercaruota trovo diametrocerca
$queryform="Select distinct supporto.supportocerca From supporto Where supporto.supporto ='".$_POST['suppt']."'";
$rit=$this->connDatabase($queryform);
$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }
    



$str=$str." And cercaruota.tiposupporto.tiposupporto = '";
$str=$str.$dataset[0][0]."'";


$qry=$str;

}


$nuovaqry=""; 
if (!empty($_POST['lamier']) && $_POST['lamier']<>'scegli...')
{

// rendi minuscola la query                          
$nuovaqry=strtolower($qry);
$doveWhere=strpos($nuovaqry, "where");

// query fino a prima di Where
$str=substr($nuovaqry,0,$doveWhere);

// aggiungo Inner Join
$str=$str."Inner Join cercaruota.tipolamiera On cercaruota.trovaruota.tipolamieraid = cercaruota.tipolamiera.idtipolamiera ";

// aggiungo l'ultima parte
$str=$str.substr($nuovaqry,$doveWhere);


// campo diametrocerca = al campo diametro di cercaruota trovo diametrocerca

$queryform="Select Distinct form.lamiera.lamieracerca From form.lamiera Where form.lamiera.lamiera = '".trim($_POST['lamier'])."'";

$rit=$this->connDatabase($queryform);
$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }
    

$str=$str." And cercaruota.tipolamiera.tipolamiera = '";

// check se $dataset non è null
if (!empty($dataset)) {$str=$str.$dataset[0][0]."'";} else {$str=$str." '";}

$qry=$str;

}


$nuovaqry=""; 
if (!empty($_POST['vol']) && $_POST['vol']<>'scegli...')
{

// rendi minuscola la query                          
$nuovaqry=strtolower($qry);
$doveWhere=strpos($nuovaqry, "where");

// query fino a prima di Where
$str=substr($nuovaqry,0,$doveWhere);

// aggiungo Inner Join
$str=$str."Inner Join cercaruota.volvenza On cercaruota.trovaruota.volvenzaid = cercaruota.volvenza.idvolvenza ";

// aggiungo l'ultima parte
$str=$str.substr($nuovaqry,$doveWhere);


// campo volvenzacerca = al campo volvenza di cercaruota trovo volvenzacerca
$queryform="Select distinct form.volvenza.volvenzacerca From form.volvenza Where form.volvenza.volvenza = '".$_POST['vol']."'";
$rit=$this->connDatabase($queryform);
$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }
    



$str=$str." And cercaruota.volvenza.volvenza = '";
$str=$str.$dataset[0][0]."'";

$qry=$str;

}


$nuovaqry=""; 
if (!empty($_POST['Ruot']) && $_POST['Ruot']<>'scegli...')
{

// rendi minuscola la query                          
$nuovaqry=strtolower($qry);
$doveWhere=strpos($nuovaqry, "where");

// query fino a prima di Where
$str=substr($nuovaqry,0,$doveWhere);

// aggiungo Inner Join
$str=$str."Inner Join cercaruota.tiporuota On cercaruota.trovaruota.tiporuotaid = cercaruota.tiporuota.idtiporuota ";

// aggiungo l'ultima parte
$str=$str.substr($nuovaqry,$doveWhere);


// campo volvenzacerca = al campo volvenza di cercaruota trovo volvenzacerca
$queryform="Select distinct tiporuota.tiporuotacerca From tiporuota Where tiporuota.tiporuota = '".$_POST['Ruot']."'";

$rit=$this->connDatabase($queryform);
$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }
    
$str=$str." And cercaruota.tiporuota.tiporuota = '";
$str=$str.$dataset[0][0]."'";

$qry=$str;

}


$nuovaqry=""; 
if (!empty($_POST['por']) && $_POST['por']<>'scegli...')
{

// rendi minuscola la query                          
$nuovaqry=strtolower($qry);
$doveWhere=strpos($nuovaqry, "where");

// query fino a prima di Where
$str=substr($nuovaqry,0,$doveWhere);

// aggiungo Inner Join
$str=$str."Inner Join cercaruota.portata On cercaruota.trovaruota.portataid = cercaruota.portata.idportata ";

// aggiungo l'ultima parte
$str=$str.substr($nuovaqry,$doveWhere);


// campo portatacerca = al campo portata di cercaruota trovo portatacerca
$queryform="Select distinct portata.portatacerca From portata Where portata.portata = '".$_POST['por']."'";

$rit=$this->connDatabase($queryform);
$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }
    
$str=$str." And cercaruota.portata.portata ='";

$str=$str.$dataset[0][0]."'";

$qry=$str;

}


$nuovaqry=""; 
if (!empty($_POST['seriesup']) && $_POST['seriesup']<>'scegli...')
{

// rendi minuscola la query                          
$nuovaqry=strtolower($qry);
$doveWhere=strpos($nuovaqry, "where");

// query fino a prima di Where
$str=substr($nuovaqry,0,$doveWhere);

// aggiungo Inner Join
$str=$str."Inner Join cercaruota.seriesupporti On cercaruota.trovaruota.seriesupportiid = cercaruota.seriesupporti.idseriesupporti ";

// aggiungo l'ultima parte
$str=$str.substr($nuovaqry,$doveWhere);


// campo portatacerca = al campo portata di cercaruota trovo portatacerca
$queryform="Select distinct form.seriesupporti.seriesupporticerca From form.seriesupporti Where form.seriesupporti.seriesupporti = '".$_POST['seriesup']."'";


$rit=$this->connDatabase($queryform);
$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }
    
$str=$str." And cercaruota.seriesupporti.seriesupporti = '";

$str=$str.$dataset[0][0]."'";

$qry=$str;

}

$rit= $this->connDatabase($qry,false);

$dataset = array();
    while($row = mysql_fetch_assoc($rit, MYSQL_NUM)) 
    {
    $dataset[] = $row;
    }

return $dataset[0][0]; 

//$nrRec= $this ->ContaNrRec($rit);

//return $nrRec; 




}


function connDatabase($query, $opt=true) {

if($opt) { include "db_config.php"; }
if(!$opt) { include "dbcerca_config.php"; }

$link = mysql_connect($host, $user, $password);
if (!$link)
  {
  die('connessione a Mysql non riuscita!: ' . mysql_error());
  }
  
  else 
{

//connessione a database
   $db_selected =mysql_select_db($db,$link);
   if (!$db_selected)
  {
  die('connessione al database non riuscita!: ' . mysql_error());
  }
  
  //qui viene passata la query
  else { 
  
   // passa query
   $result = mysql_query($query,$link) or die(mysql_error()." ".$query);
   //return $result;
   
   return $result;
    
   mysql_close($link);
   
 
       }
 } 
                                  }
                                  
		
		public function ShowApplicazioni()
		{
    
			$sql = "Select * From applicazione";
      $res = $this->connDatabase($sql);
      
			$applicazioni = '<option value="0">scegli...</option>';
			
				while($row = mysql_fetch_array($res))
				{
					$applicazioni .= '<option value="' . $row['idapplicazione'] . '">' . utf8_encode($row['applicazione']) . '</option>';
				}
				
			return $applicazioni;      			
		}
    
    
    	public function ShowComeRuota()
		{
			$sql = "Select * From comeruota";
      $res = $this->connDatabase($sql);
			
      $comeruota = '<option value="0">scegli...</option>';
			
				while($row = mysql_fetch_array($res))
				{
					$comeruota .= '<option value="' . $row['idcomeruota'] . '">' . utf8_encode($row['comeruota']) . '</option>';
				}
				
			return $comeruota;
		}
		
		public function ShowDiametro()
		{
			$sql = "Select diametro.iddiametro, diametro.diametro From diametro Where diametro.applicazioneid =".$_POST['id'];
      $sql = $sql." And diametro.comeruotaid =".$_POST['id2'];
      $res = $this->connDatabase($sql);
      
      $diametro = '<option value="0">scegli...</option>';
      			
				while($row = mysql_fetch_array($res))
				{
					$diametro .= '<option value="' . $row['iddiametro'] . '">' . utf8_encode($row['diametro']) . '</option>';
				}
        
      return $diametro;
		}
		
		public function ShowSupporto()
		{
			$sql = "SELECT supporto.idsup, supporto.supporto FROM supporto WHERE supporto.applicazioneid=".$_POST['id'];
      $sql = $sql." And supporto.comeruotaid =".$_POST['id2'];
			$res = $this->connDatabase($sql);
      
      $sup = '<option value="0">scegli...</option>';
      
			
				while($row = mysql_fetch_array($res))
				{
					$sup .= '<option value="' . $row['idsup'] . '">' . utf8_encode($row['supporto']) . '</option>';
				}
				
			return $sup;
		}
    
   public function ShowLamiera()
		{
			$sql = "SELECT lamiera.idlamiera, lamiera.lamiera FROM lamiera WHERE lamiera.applicazioneid=".$_POST['id'];
      $sql = $sql." And lamiera.comeruotaid =".$_POST['id2'];
      
      $res = $this->connDatabase($sql);
      
      $lam = '<option value="0">scegli...</option>';
      
			
				while($row = mysql_fetch_array($res))
				{
					$lam .= '<option value="' . $row['idlamiera'] . '"> ' . utf8_encode($row['lamiera']) . ' </option>';
				}
				
			return $lam;
		}
    
   public function ShowPavimenti()
		{
			$sql = "Select tipipavimenti.idtipipav, tipipavimenti.tipipavimenti From tipipavimenti Where tipipavimenti.applicazioneid=".$_POST['id'];
      $sql = $sql." And tipipavimenti.comeruotaid =".$_POST['id2'];
      
      $res = $this->connDatabase($sql);
      
      $pav = '<option value="0">scegli...</option>';
      
			
				while($row = mysql_fetch_array($res))
				{
					$pav .= '<option value="' . $row['idtipipav'] . '">' . utf8_encode($row['tipipavimenti']) . '</option>';
				}
				
			return $pav;
		}
    
   public function ShowVolvenza()
		{
			$sql = "Select form.volvenza.idvolvenza, form.volvenza.volvenza From form.volvenza Where form.volvenza.applicazioneid = ".$_POST['id'];
      $sql = $sql." And form.volvenza.comeruotaid = ".$_POST['id2'];
      
      $res = $this->connDatabase($sql);
      
      $volven = '<option value="0">scegli...</option>';
      
			
				while($row = mysql_fetch_array($res))
				{
					$volven .= '<option value="' . $row['idvolvenza'] . '">' . utf8_encode($row['volvenza']) . '</option>';
				}
				
			return $volven;
		}
    
   public function ShowRuota()
		{
			$sql = "Select tiporuota.idtiporuota, tiporuota.tiporuota From tiporuota Where tiporuota.applicazioneid =".$_POST['id']; 
      $sql = $sql." And tiporuota.comeruotaid =".$_POST['id2'];
      
      $res = $this->connDatabase($sql);
      
      $ruot = '<option value="0">scegli...</option>';
      
			
				while($row = mysql_fetch_array($res))
				{
					$ruot .= '<option value="' . $row['idtiporuota'] . '">' . utf8_encode($row['tiporuota']) . '</option>';
				}
				
			return $ruot;
		}
    
  public function ShowPortata()
		{
			$sql = "Select form.portata.idportata, form.portata.portata From form.portata Where form.portata.applicazioneid =".$_POST['id'];
      $sql = $sql." And form.portata.comeruotaid =".$_POST['id2'];
      
      $res = $this->connDatabase($sql);
      
      $port = '<option value="0">scegli...</option>';
      
			
				while($row = mysql_fetch_array($res))
				{
					$port .= '<option value="' . $row['idportata'] . '">' . utf8_encode($row['portata']) . '</option>';
				}
				
			return $port;
		}
    
  public function ShowSerieSup()
		{
			$sql = "Select form.seriesupporti.idseriesupporti, form.seriesupporti.seriesupporti From form.seriesupporti Where form.seriesupporti.applicazioneid =".$_POST['id'];
      $sql = $sql." And form.seriesupporti.comeruotaid =".$_POST['id2'];
      
      $res = $this->connDatabase($sql);
      
      $series = '<option value="0">scegli...</option>';
      
			
				while($row = mysql_fetch_array($res))
				{
					$series .= '<option value="' . $row['idseriesupporti'] . '">' . utf8_encode($row['seriesupporti']) . '</option>';
				}
				
			return $series;
		}
    
}

?>

Tutto dovrebbe funzionare bene, come si può vedere in http://www.cebora.it/ruote/pp1/cercaruota.php ma vorrei abbattere ulteriormente i tempi di interrogazione del database soprattutto della Query Select count(*) quando lanciata da i primi due combo ComeRuota e Applicazione.

Posso anche postare il file sql relativo al database se necessario.

Grazie per qualsiasi consiglio.
 

ans66

Utente Attivo
27 Ago 2011
158
0
16
Dimenticavo..con IE ho dei problemi nel caricamento dei combo (mentre con firefox e Google Chrome è tutto ok). La cosa strana che in locale tutto funziona correttamente anche con IE.
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
la prima ottimizzazione la devi fare sul database stesso, dotandolo di indici dipendenti dalle ricerche che fai,
parli di una "select count", molto banalmente, hai messo un indice che contiene le colonne della clausola where ?

potresti creare anche delle view su più tabelle, adeguatamente indicizzate sempre funzionali alle query,
in questo caso faresti delle select sulla "tabella" alias view

gli indici pesano in termini di spazio disco occupato, ma rendono le ricerche molto veloci,
nel tuo caso, mi sembra che il database sia abbastanza statico, dovrebbe subire aggiornamenti periodici ma non continui,
per cui, abbonderei con gli indici

considera inoltre che gli aggiornamenti li puoi realizzare su una copia del database, riducendo in quel momento gli indici all'essenziale,
per ridurre i tempi dell'aggiornamento stesso, la creazione di un indice è "meno faticosa" che il suo aggiornamento

usando sql server della famiglia microsoft, è presente un tool "database engine tuning advisor" il quale, fornendogli la query,
ti suggerisce e volendo ti crea, gli indici ottimizzati,

se non disponi di un tool simile, prova a postare lo schema del db e la query che ritieni più significativa (senza parametri, ma con valori),
posso provare a creare il database e sottoporre al "tuning" la relativa query

ciao
Marino
 

ans66

Utente Attivo
27 Ago 2011
158
0
16
Marino,

Innanzitutto vorrei ringraziarti per la risposta che mi ha fatto sicuramente riflettere.

Nella mia Query 'Select count(*) stavo pensando ad una modifica così come tu hai suggerito in Select count(codice) dove la colonna codice è unica (unique) anche se ho fatto dei test e non mi risultava un grande abbattimento dei tempi.

Sono unique (uniche) tutte le colonne soggette a Where nella Select.

Per quanto riguarda le view onestamente non pensavo mi potessero aiutare in questo contesto. A questo punto vorrei saperne un po' di più e quindi farò qualche ricerca in merito.

Questa è la query incriminata dove ho dato un valore ad ogni select selezionabile:

select count(*) from cercaruota.trovaruota inner join diametro on trovaruota.diametroid = diametro.iddiametro inner join cercaruota.tiposupporto on cercaruota.trovaruota.tiposupportoid = cercaruota.tiposupporto.idtiposupporto inner join cercaruota.tipolamiera on cercaruota.trovaruota.tipolamieraid = cercaruota.tipolamiera.idtipolamiera inner join cercaruota.volvenza on cercaruota.trovaruota.volvenzaid = cercaruota.volvenza.idvolvenza inner join cercaruota.tiporuota on cercaruota.trovaruota.tiporuotaid = cercaruota.tiporuota.idtiporuota inner join cercaruota.portata on cercaruota.trovaruota.portataid = cercaruota.portata.idportata Inner Join cercaruota.seriesupporti On cercaruota.trovaruota.seriesupportiid = cercaruota.seriesupporti.idseriesupporti where cercaruota.trovaruota.industriale =1 and diametro.diametro = '80to100mm' and cercaruota.tiposupporto.tiposupporto = 'piastragirevole' and cercaruota.tipolamiera.tipolamiera = 'lamierazincata' and cercaruota.volvenza.volvenza = 'boccola' and cercaruota.tiporuota.tiporuota = 'anellogomma' and cercaruota.portata.portata ='60to80kg' And cercaruota.seriesupporti.seriesupporti = 'Xline'

Non ho capito bene cosa intendi per "schema del database". Ti invio in allegato un paio di immagini relative alla struttura della tabella principale Trovaruota e ad una padre e cioè quella diametro. struttura tabella trovaruota.jpgindici tabella trovaruota.jpgtabella diametro.jpg Nella tabella Trovaruota ho una serie campi di numerici che sono in relazione agli indici delle altre tabelle (relazione: molte ad uno).

Onestamente non conosco il tool "tuning" di cui mi hai parlato. Anche in questo caso farò qualche ricerca.

Grazie davvero per l'aiuto.
 

Allegati

  • struttura tabella trovaruota.jpg
    struttura tabella trovaruota.jpg
    105,3 KB · Visite: 383
  • struttura tabella diametro.jpg
    struttura tabella diametro.jpg
    101,5 KB · Visite: 369
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
per valutare un miglioramento, potresti creare una view, quale quella riportata sotto
e fare la select senza più le join,
in questo modo, il motore del database conosce già i legami tra le tabelle e può gestire meglio le ricerche

nel caso non fossi soddisfatto, puoi sempre fare una "DROP VIEW selezione"

"selezione" lo sostituisci con il nome che preferisci

ovviamente nella clausola where metterai solo i nomi dei campi non più le tabelle, io ho fatto un copia/incolla (scusami se non ho modificato)
fai sapere, ciao
Marino

Codice:
CREATE VIEW selezione AS select
.... elenco dei campi da estrarre di ciascuna tabella, al limite tutti
     nel caso di nomi uguali (forse indici), indica quello della tabella in join
campo1,
campo2,
campo3,
tabella_join.campo4
....
from cercaruota.trovaruota 
inner join diametro on trovaruota.diametroid = diametro.iddiametro 
inner join cercaruota.tiposupporto on cercaruota.trovaruota.tiposupportoid = cercaruota.tiposupporto.idtiposupporto 
inner join cercaruota.tipolamiera on cercaruota.trovaruota.tipolamieraid = cercaruota.tipolamiera.idtipolamiera 
inner join cercaruota.volvenza on cercaruota.trovaruota.volvenzaid = cercaruota.volvenza.idvolvenza 
inner join cercaruota.tiporuota on cercaruota.trovaruota.tiporuotaid = cercaruota.tiporuota.idtiporuota 
inner join cercaruota.portata on cercaruota.trovaruota.portataid = cercaruota.portata.idportata 
Inner Join cercaruota.seriesupporti On cercaruota.trovaruota.seriesupportiid = cercaruota.seriesupporti.idseriesupporti

Codice:
select count(*) from selezione
where cercaruota.trovaruota.industriale =1 
and diametro.diametro = '80to100mm' 
and cercaruota.tiposupporto.tiposupporto = 'piastragirevole' 
and cercaruota.tipolamiera.tipolamiera = 'lamierazincata' 
and cercaruota.volvenza.volvenza = 'boccola' 
and cercaruota.tiporuota.tiporuota = 'anellogomma' 
and cercaruota.portata.portata ='60to80kg' 
And cercaruota.seriesupporti.seriesupporti = 'Xline'
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
ti chiedo anche questo,
perché hai messo gli "ID" nella tabella trovaruota e non hai messo invece direttamente le caratteristiche da cercare ?
esempio, la tabella diametro mi sembra contenga solo questo valore
per fare la selezione, vai a leggere una seconda tabella per ottenere un indice con cui leggere la prima
questo, mi sembra, che non ti risparmi records nella tabella trovaruota
quindi mettendo direttamente la caratteristica, la selezione sarebbe stata fatta su un'unica tabella, eventualmente con aggiunta delle join se servivano info aggiuntive tipiche delle varie caratteristiche

avresti indicizzato la tabella principale con tutte le caratteristiche invece che con gli "ID"
e le tabelle delle caratteristiche sarebbero state indicizzate nello stesso modo

non solo, potevi creare un indice "combinato" mettendo nell' ordine le caratteristiche da meno popolate a più popolate

avresti avuto performance decisamente migliori, vedo molti fissarsi sugli "ID" ma perché ?
pensaci, ciao
Marino
 
Ultima modifica:

ans66

Utente Attivo
27 Ago 2011
158
0
16
Marino,

Mi metto subito a lavorare sulla VIEW che, se sei d'accordo, vorrei poi postare.

Grazie davvero per la tua superba consulenza
 

ans66

Utente Attivo
27 Ago 2011
158
0
16
ti chiedo anche questo,
perché hai messo gli "ID" nella tabella trovaruota e non hai messo invece direttamente le caratteristiche da cercare ?

la tabella diametro deve contenere solo un numero preciso di diametri (da 30mm a 280mm) e quindi ritenevo come unica soluzione possibile per normalizzare il database creare una seconda tabella padre legata alla tabella trovaruota.

la tabella diametro mi sembra contenga solo questo valore
per fare la selezione, vai a leggere una seconda tabella per ottenere un indice con cui leggere la prima

si esattamente

questo, mi sembra, che non ti risparmi records nella tabella trovaruota
quindi mettendo direttamente la caratteristica, la selezione sarebbe stata fatta su un'unica tabella, eventualmente con aggiunta delle join se servivano info aggiuntive tipiche delle varie caratteristiche

avresti indicizzato la tabella principale con tutte le caratteristiche invece che con gli "ID"
e le tabelle delle caratteristiche sarebbero state indicizzate nello stesso modo

non solo, potevi creare un indice "combinato" mettendo nell' ordine le caratteristiche da meno popolate a più popolate

avresti avuto performance decisamente migliori, vedo molti fissarsi sugli "ID" ma perché ?
pensaci, ciao
Marino

Non mi chiaro come sia possibile avere una sola tabella con campi indicizzati normalizzata e davvero non capisco come
"creare creare un indice "combinato" mettendo nell' ordine le caratteristiche da meno popolate a più popolate".

mi potresti chiarire meglio il concetto con un esempio?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
dovremmo prima chiarire il concetto di
tabella con campi indicizzati normalizzata
e la differenza funzionale esistente con
tabella con campi indicizzati che contengono (nel tuo caso) la caratteristica

nel primo caso hai tabelle e indici vari, nel secondo hai l'elemento di ricerca diretto
perché hai scelto la prima soluzione ?
 

ans66

Utente Attivo
27 Ago 2011
158
0
16
Non credevo che con una sola tabella si potessero ottenere medesime prestazioni o addirittura migliori.

Vorrei riepilogare per capire se ho inteso tutto bene:

una sola tabella
indici su tutti i campi soggetti a ricerca
creare un indice "combinato" mettendo nell' ordine le caratteristiche da meno popolate a più popolate (e qui davvero non riesco ad arrivarci)

Devo ammettere che stai sfatando tante mie certezze ma d'altronde mi hai anche insegnato ad usare le VIEW nella maniera appropriata (vedi precedente argomento) e ti devo ringraziare davvero per questo!
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
senza considerare il "vatchar(20)" fisso avrei strutturato la tabella come hai fatto tu ma con le caratteristiche invece degli indici
Codice:
/* trovaruota */
/* summary: elenco delle ruote disponibili e delle loro caratteristiche */
CREATE TABLE trovaruota 
(
	codice			varchar(10) not null,	/* codice del componente */
	descrizione		varchar(50),	/* descrizione */

	industriale		int,	/* caratteristica */
	diametro		varchar(20),	/* caratteristica */
	portata			varchar(20),	/* caratteristica */
	seriesupporti		varchar(20),	/* caratteristica */
	tipolamiera		varchar(20),	/* caratteristica */
	tipopavimenti		varchar(20),	/* caratteristica */
	tiporuota		varchar(20),	/* caratteristica */
	tiposupporto		varchar(20),	/* caratteristica */
	volvenza		varchar(20),	/* caratteristica */
	dimensionesupporto	varchar(20),	/* caratteristica */

	linkfoto		varchar(50),	/* link */
	linknote		varchar(100),	/* link */
	linkpdf			varchar(50),	/* link */
	linkdwg			varchar(50),	/* link */
	linkdisegno3		varchar(50),	/* link */
	linkdisegno4		varchar(50),	/* link */
	linkweb			varchar(100),	/* link */

	UNIQUE		(codice),
	CONSTRAINT	idx_trovaruota_01 PRIMARY KEY (codice)
)
GO
avrei creato indici singoli su ciascuna caratteristica
e poi in funzione delle ricerche, che mi sembrano abbastanza definite,
avrei creato indici composti, come esempio, semplificando e limitando a due caratteristiche,
avrei creato diametro e industriale/comunità,

diametro seziona la tabella molto di più che industriale/comunità che la seziona solo in 2 parti
con questo esempio penso si spieghi + o - popolato e quale vantaggio porti nella selezione
dispo x tutte le valutazioni che ti siano utili,
ciao
Marino
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
mi sono posto l'obiettivo di eliminare le join dalle query,
dal mio punto di vista sono estremamente dannose in termini di performances
mi sono permesso di rivedere gli script che hai postato e li ho "leggermente" modificati,
l'immagine allegata ti garantisce che ciò che sto postando è funzionante anche se scollegato dal db
(ma non ho eliminato l'interazione con il db,
mi sono intromesso per arrivare al risultato, senza avere a disposizione il tuo db)

RICOGNIZIONE DEI FILE ALLEGATI (nello zip),

index.php è il tuo file principale che ho sfrondato del css e del js per renderlo più "umano",
con qualche aggiustamento qua e la ... ma nulla di importante

index.css è giustappunto la parte sfrondata, è pari all'originale, come lo è tabelle.css

index.js è anch'esso la parte sfrondata ma è cambiato in modo radicale nel funzionamento non nella logica
ridotto di molto nel numero di righe avendo creato 2 funzioni che fanno quel che devono
di conseguenza eliminati tutti gli script "select" e "count" numerati, in esso richiamati,
2 sono gli script nuovi richiamati al posto di tutti i precedenti e fanno esattamente le stesse funzioni
(se togli i log in essi contenuti, sono veramente di minime proporzioni)

characteristics.php è uno dei due script, chiamati da js, dal nome carica le "select option" per tutti i menu a tendina,
in funzione dei parametri di chiamata, per semplificare ho usato,
PHP:
  extract($_POST, EXTR_OVERWRITE);
  $data = call_user_func( array($opt, $funzione)); // GRAZIE CRIRIC - ILMANU
risparmiando righe di codice

elementscount.php è il secondo script chiamato da js, che crea la query di ricerca restituendo
il numero di elementi contati (ora restituisce time),
come vedi sotto, la query si genera mano mano che si fanno le scelte dei menu a tendina
ed è la query sulla TABELLA PRINCIPALE senza il "pacco" di join originale,
se la provi con il tool di mysql deve darti il risultato prima dell'enter !
si ma dove trovi la query ?

z_cercaruota.log è il file di log generato dagli script, nello stesso folder, che riporta
i passi fatti dai vari script, è ivi compresa la query generata
(ti lascio la mia copia, ma eliminala prima di fare la tua prova)

select.class.php, sfrondato di tutta la parte che crea le select join, è rimasto l'essenziale,
1/3 dell'originale

mg1_it.php, fa le veci del db per le caratteristiche, non te ne curare

"il resto è rumore"

COME PROVARLO,

crea un folder dove mettere tutti i file dello zip, ovviamente vedi le differenze con gli originali
e per provare il tutto, esegui INDEX.PHP
nel finto database c'é solo il caso "industriale"

se ti garba ..... fammi sapere
ciao
Marino

ps: ho imparato l'interazione tra js, php e html per aggiornare i valori presi da uno, giocati dal secondo e vinti dal terzo

Codice:
select count(*) from trovaruota where industriale=2
select count(*) from trovaruota where industriale=2 and diametroid=5
select count(*) from trovaruota where industriale=2 and diametroid=5 and tiposupportoid=4
select count(*) from trovaruota where industriale=2 and diametroid=5 and tipolamieraid=2 and tiposupportoid=4
select count(*) from trovaruota where industriale=2 and diametroid=5 and tipolamieraid=2 and tiposupportoid=4 and volvenzaid=2
select count(*) from trovaruota where industriale=2 and diametroid=5 and tipolamieraid=2 and tiporuotaid=5 and tiposupportoid=4 and volvenzaid=2
select count(*) from trovaruota where industriale=2 and diametroid=5 and portataid=5 and tipolamieraid=2 and tiporuotaid=5 and tiposupportoid=4 and volvenzaid=2
select count(*) from trovaruota where industriale=2 and diametroid=5 and portataid=5 and seriesupportid=2 and tipolamieraid=2 and tiporuotaid=5 and tiposupportoid=4 and volvenzaid=2

Cattura.PNG
Vedi l'allegato CercaRuota.zip
 

Discussioni simili