Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Reprt iscritti [Query troppo lunga]

    Salve a tutti,
    il problema di oggi è il seguente...
    ho degli iscritti ad una newsletter (sul database) e vorrei fare un piccolo report diviso per nazione.

    ho una array associativo delle nazioni tipo "IT"=>"Italia"

    il problema è che l'array è parecchio nutrito (tipo oltre il centinaio di record)

    per generare la mia tabella ho creato una cosa del genere (che restringo per celerità)


    Codice PHP:
    $countries2=array("AF"=>"Afghanistan","AL"=>"Albania","IT"=>"Italy","JM"=>"Jamaica","JP"=>"Japan","US"=>"United States");
    $list='';
    $c=0;
    foreach (
    $countries2 as $sigla=>$paese){
        
        if(
    $c>0){
        
    $comma=",";
        }else{
        
    $comma="";
        }
        
    $list.=$comma SUM(IF(country='$sigla',1,0)) AS ".fullReplace($paese);
        
    $c++;
    }
    //print $list;
    //////////////////////////////////////////////////////////////////////////////////////////

    $q="SELECT $list FROM mailing GROUP BY country ORDER BY country";


    //che genera questa 

    /*
    SELECT SUM(IF(country='AF',1,0)) AS Afghanistan , SUM(IF(country='AL',1,0)) AS Albania , SUM(IF(country='IT',1,0)) AS Italy , SUM(IF(country='JM',1,0)) AS Jamaica , SUM(IF(country='JP',1,0)) AS Japan , SUM(IF(country='US',1,0)) AS United_States FROM mailing GROUP BY country ORDER BY country
    */ 
    il problema è che con l'array originale (quello massiccio) non funziona....

    esiste un modo per ottenere lo stesso risultato in maniera più funzionale??

    grazie!!!
    Ricorda che mentre tu sei quì a ridere e scherzare, nel mondo c'è qualcun'altro che ride e scherza più di te!

  2. #2
    metti l'array in una tabella del database e facci una join

  3. #3
    Grazie bubu77,
    era più facile di quello che credevo...
    ho semplicemente trasformato la query in

    SELECT COUNT(country) AS totale FROM mailing GROUP BY country

    ed opera una selezione più che efficace

    è il classico uovo di colombo...
    Ricorda che mentre tu sei quì a ridere e scherzare, nel mondo c'è qualcun'altro che ride e scherza più di te!

  4. #4
    Originariamente inviato da bikfellas
    Grazie bubu77,
    era più facile di quello che credevo...
    ho semplicemente trasformato la query in

    SELECT COUNT(country) AS totale FROM mailing GROUP BY country

    ed opera una selezione più che efficace

    è il classico uovo di colombo...
    magari se fai ...

    SELECT country, COUNT(country) AS totale FROM mailing GROUP BY country

    oltre a ottenere il valore per nazione hai anche il codice della nazione ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Grazie daniele_dlll
    era quello che ho fatto...solo che da buon pigro l'ho omesso...
    pardonnnnnnn
    Ricorda che mentre tu sei quì a ridere e scherzare, nel mondo c'è qualcun'altro che ride e scherza più di te!

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.