Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    Semplificarsi la vita eliminando query

    Buongiorno ragazzi, ringrazio sempre tutti del forum per il supporto che mi date, ho questo problema , ho creato dei filtri che a secondo della scelta estraggono dati dal db e funziona tutto, ma lo script e lungo e pieno di if, c'è un modo per semplificarlo?


    codice:
      <?php     if($_REQUEST['idcompetenza'] !='' && $_REQUEST['stato']!='' &&  $_REQUEST['idnegozio'] !='' && $_REQUEST['idprodotto'] !='' && $_REQUEST['idgestore'] !='' && $_REQUEST['datainizio'] !='' && $_REQUEST['datafine'] !='' && $_REQUEST['stornato'] !='' && $_REQUEST['pagato'] !=''){
           
               
             $datainizio=$_REQUEST['datainizio'];
        
              $data= convertiData($datainizio); 
        
                
               $datafine=$_REQUEST['datafine'];
        
                $data2= convertiData($datafine); 
          
                
                 if (! $db->Query("SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio, contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente, contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce, contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione, clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce, prodottigare.fissovoceadsl, prodottigare.mobile,  prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv FROM competenze RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente LEFT OUTER JOIN prodottigare LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto WHERE contrattigare.datainizio  BETWEEN('{$data}')AND('{$data2}') AND contrattigare.idcompetenza='{$_REQUEST['idcompetenza']}' AND  contrattigare.stato='{$_REQUEST['stato']}' AND contrattigare.idnegozio='{$_REQUEST['idnegozio']}' AND contrattigare.idprodotto='{$_REQUEST['idprodotto']}' AND contrattigare.stornato='{$_REQUEST['stornato']}'  AND contrattigare.pagato='{$_REQUEST['pagato']}'  ORDER BY contrattigare.idcontratto DESC")) echo $db->Kill();  
                 
         }elseif ($_REQUEST['idcompetenza'] !='' && $_REQUEST['stato']!='' &&  $_REQUEST['idnegozio'] !='' && $_REQUEST['idprodotto'] !='' && $_REQUEST['idgestore'] !='' && $_REQUEST['datainizio'] !='' && $_REQUEST['datafine'] !='' && $_REQUEST['stornato'] !='') {
             
                $datainizio=$_REQUEST['datainizio'];
        
              $data= convertiData($datainizio); 
        
                
               $datafine=$_REQUEST['datafine'];
        
                $data2= convertiData($datafine); 
             
        
                 if (! $db->Query("SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio, contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente, contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce, contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione, clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce, prodottigare.fissovoceadsl, prodottigare.mobile,  prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv FROM competenze RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente LEFT OUTER JOIN prodottigare LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto WHERE contrattigare.datainizio  BETWEEN('{$data}')AND('{$data2}') AND contrattigare.idcompetenza='{$_REQUEST['idcompetenza']}' AND  contrattigare.stato='{$_REQUEST['stato']}' AND contrattigare.idnegozio='{$_REQUEST['idnegozio']}' AND contrattigare.idprodotto='{$_REQUEST['idprodotto']}' AND contrattigare.stornato='{$_REQUEST['stornato']}'  ORDER BY contrattigare.idcontratto DESC")) echo $db->Kill();  
                 
      }elseif ($_REQUEST['idcompetenza'] !='' && $_REQUEST['stato']!='' &&  $_REQUEST['idnegozio'] !='' && $_REQUEST['idprodotto'] !='' && $_REQUEST['idgestore'] !='' && $_REQUEST['datainizio'] !='' && $_REQUEST['datafine'] !='') {
    
    
             
                $datainizio=$_REQUEST['datainizio'];
        
              $data= convertiData($datainizio); 
        
                
               $datafine=$_REQUEST['datafine'];
        
                $data2= convertiData($datafine); 
             
        
                 if (! $db->Query("SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio, contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente, contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce, contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione, clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce, prodottigare.fissovoceadsl, prodottigare.mobile,  prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv FROM competenze RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente LEFT OUTER JOIN prodottigare LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto WHERE contrattigare.datainizio  BETWEEN('{$data}')AND('{$data2}') AND contrattigare.idcompetenza='{$_REQUEST['idcompetenza']}' AND  contrattigare.stato='{$_REQUEST['stato']}' AND contrattigare.idnegozio='{$_REQUEST['idnegozio']}' AND contrattigare.idprodotto='{$_REQUEST['idprodotto']}' ORDER BY contrattigare.idcontratto DESC")) echo $db->Kill();  
                 
      } elseif ($_REQUEST['idcompetenza'] !='' && $_REQUEST['stato']!='' &&  $_REQUEST['idnegozio'] !='' && $_REQUEST['idprodotto'] !='' && $_REQUEST['idgestore'] !='') {
    
    
             
                $datainizio=$_REQUEST['datainizio'];
        
              $data= convertiData($datainizio); 
        
                
               $datafine=$_REQUEST['datafine'];
        
                $data2= convertiData($datafine); 
             
        
                 if (! $db->Query("SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio, contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente, contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce, contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione, clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce, prodottigare.fissovoceadsl, prodottigare.mobile,  prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv FROM competenze RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente LEFT OUTER JOIN prodottigare LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto WHERE  contrattigare.idcompetenza='{$_REQUEST['idcompetenza']}' AND  contrattigare.stato='{$_REQUEST['stato']}' AND contrattigare.idnegozio='{$_REQUEST['idnegozio']}' AND contrattigare.idprodotto='{$_REQUEST['idprodotto']}' ORDER BY contrattigare.idcontratto DESC")) echo $db->Kill();  
                 
          } elseif ($_REQUEST['idcompetenza'] !='' && $_REQUEST['stato']!='' &&  $_REQUEST['idnegozio'] !='') {
     
    
    
        
                 if (! $db->Query("SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio, contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente, contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce, contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione, clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce, prodottigare.fissovoceadsl, prodottigare.mobile,  prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv FROM competenze RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente LEFT OUTER JOIN prodottigare LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto WHERE  contrattigare.idcompetenza='{$_REQUEST['idcompetenza']}' AND  contrattigare.stato='{$_REQUEST['stato']}' AND contrattigare.idnegozio='{$_REQUEST['idnegozio']}'  ORDER BY contrattigare.idcontratto DESC")) echo $db->Kill();  
                        
         
         }else{
      if (! $db->Query("SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio, contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente, contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce, contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione, clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce, prodottigare.fissovoceadsl, prodottigare.mobile,  prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv FROM competenze RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente LEFT OUTER JOIN prodottigare LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto ORDER BY contrattigare.idcontratto DESC LIMIT 250")) echo $db->Kill();                   
                
         }
    C' un modo per semplificarlo. Grazie

  2. #2
    NOn sono riuscito ad incollarlo tutto, troppo lungo .

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Mon Dieu !!! Come si fa a fare qualcosa di simile ? Spero non sia per il tuo lavoro.

    Se la parte select e la parte dell join sono uguali per tutte le query mettile in una variabile e tutto sarà già più chiaro.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Mon Dieu !!! Come si fa a fare qualcosa di simile ? Spero non sia per il tuo lavoro.

    Se la parte select e la parte dell join sono uguali per tutte le query mettile in una variabile e tutto sarà già più chiaro.



    Si sono tutte uguali, sia select che join , cosa intendi per una variabile , mi puoi spiegare meglio?

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Cosi.

    Codice PHP:
    $select_from_clauses "SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio, 
    contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente, 
    contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce, 
    contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione, 
    clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce, 
    prodottigare.fissovoceadsl, prodottigare.mobile,  prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv 
    FROM competenze 
    RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza 
    LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio 
    LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente 
    LEFT OUTER JOIN prodottigare 
    LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto "

    Poi costituisci la clausola where che aggiungi alla query.

    Codice PHP:
    $where_clause " WHERE metti poi quello che ti serve..."
    In fine fai la query finale

    Codice PHP:
    $query $select_from_clauses.$where_clause;
    $db->Query($query); 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    perfetto e nel if che elabora tutto potre fare tipo cos'


    $sqlSearch = "WHERE idEvento";


    $search_descrizione = $_POST['search_descrizione'];
    if($search_descrizione != ""){
    $sqlSearch .= " AND descrizione LIKE '%$search_descrizione%' ";
    }
    $search_home = $_POST['search_home'];
    if($search_home == "si"){
    $sqlSearch .= " AND home ";
    }
    elseif($search_home == "no"){
    $sqlSearch .= " AND NOT home ";
    }
    $search_locandina = $_POST['search_locandina'];
    if($search_locandina == "si"){
    $sqlSearch .= " AND locandina != '' ";
    }
    elseif($search_locandina == "no"){
    $sqlSearch .= " AND locandina = '' ";
    }

    Ovviamente adattata al mio caso giusto? ci provo subito

  7. #7
    Praticamente il problema che ora ho, non ho provato se va la ricerca, ma intanto devo far visualizzare di default i primi 250 record

    ho fatto così ma non estrae nessun dato

    <?php


    $sqlSearch = "WHERE";

    if($_REQUEST['idcompentenza'] != ""){

    $sqlSearch .= "contrattigare.idcompenteza = '{$_REQUEST['idcompentenza']}'";

    }



    $select_from_clauses = "SELECT DATE_FORMAT(contrattigare.datainizio, '%d-%m-%Y')as inizio, contrattigare.idcontratto, contrattigare.idnegozio,
    contrattigare.idprodotto, contrattigare.utenza, contrattigare.datainizio, contrattigare.durata, contrattigare.idcliente,
    contrattigare.compenso, contrattigare.punteggiomobile, contrattigare.pagato, contrattigare.punteggiofissovoce,
    contrattigare.punteggiofissovoceadsl, contrattigare.stato, contrattigare.stornato, prodottigare.descrizione,
    clientigare.cognome, clientigare.nome, competenze.descrizione AS Cdescrizione, negozi.negozio, prodottigare.fissovoce,
    prodottigare.fissovoceadsl, prodottigare.mobile, prodottigare.idgestore, contrattigare.idcompetenza, contrattigare.utenzaprovv
    FROM competenze
    RIGHT OUTER JOIN contrattigare ON competenze.idcompetenza = contrattigare.idcompetenza
    LEFT OUTER JOIN negozi ON contrattigare.idnegozio = negozi.idnegozio
    LEFT OUTER JOIN clientigare ON contrattigare.idcliente = clientigare.idcliente
    LEFT OUTER JOIN prodottigare
    LEFT OUTER JOIN gestori ON prodottigare.idgestore = gestori.idgestore ON contrattigare.idprodotto = prodottigare.idprodotto";

    if($_REQUEST['idcompentenza']!=''){
    $prepagatigare =$db->Query( $select_from_clauses.$sqlSearch);
    }else{
    $ordine= "ORDER BY contrattigare.idcontratto DESC LIMIT 250";
    $prepagatigare =$db->Query($select_from_clauses.'ORDER BY contrattigare.idcontratto DESC LIMIT 250');
    }
    while($prepagatigare=$db->Row()){ ?>

    Se tolgo order mi estrae tutti i dati,
    Ultima modifica di Werwolfe; 08-11-2014 a 18:52

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai pensato a mettere uno spazio prima dell'order by ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    no :P funziona la query che appare se nessun cerca nulla, ma invece quella nel if no , non cerca nulla


    Codice PHP:
    $prepagatigare =$db->Query$select_from_clauses.' '.$sqlSearch); 
    ho dato spazio anche sopra ma niente
    Ultima modifica di Werwolfe; 08-11-2014 a 19:58

  10. #10
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ripeto la domanda. Non vedo alcun spazio tra $select_from_clauses e 'ORDER BY contrattigare.idcontratto DESC LIMIT 250'

    Esempio con uno spazio : $prepagatigare =$db->Query($select_from_clauses.' ORDER BY contrattigare.idcontratto DESC LIMIT 250');
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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.