• User Newbie

    query nidificata

    <? 
    include &#40;"conf.inc.php"&#41;; 
    $sql = 'TRUNCATE TABLE `gruppi`'; 
    $query = mysql_query &#40;$sql, $connessione&#41; or die &#40;"Problemi con l'azzeramento del DB"&#41;; 
    $sql = 'ALTER TABLE `gruppi` pack_keys=0 checksum=0 delay_key_write=0 auto_increment=1'; 
    $query = mysql_query &#40;$sql, $connessione&#41; or die &#40;"Problemi con la riorganizzazione della tabella gruppi"&#41;; 
    
    echo "<h2 align=\"center\">Elenco Studenti 
    </h2>"; 
    
    $sql = "SELECT DISTINCT&#40;txtnomeGruppo&#41; 
    FROM `maremonti` 
    LIMIT 0, 10000"; 
    $query = mysql_query &#40;$sql, $connessione&#41; or die &#40;"Errore !!"&#41;; 
    $num = mysql_num_rows&#40;$query&#41;; 
    
    
    echo "  $num gruppi trovati
    "; 
    
    echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\"> 
    <tr> 
    <td width=\"60%\">Nome Gruppo</td> 
    </tr> 
    </table>"; 
    
    for &#40;$i=0; $i<$num; $i++&#41; 
    &#123; 
    $gruppo = mysql_result&#40;$query, $i, "txtnomeGruppo"&#41;; 
    echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\"> 
    <tr> 
    <td width=\"60%\">$gruppo </td> 
    </tr> 
    </table>"; 
    
    &#125; 
    
    $sql2 = "INSERT INTO gruppi &#40;id, txtnomeGruppo&#41; VALUES &#40;'', '$gruppo'&#41;"; 
    $query = mysql_query &#40;$sql2, $connessione&#41; or die &#40;"Errore!!!"&#41;; 
    
    mysql_close&#40;$connessione&#41;; 
    ?> 
    

    Ciao a tutti, devo prendere il dato univoco del nome gruppo dalla prima tabella e inserirlo nella seconda tabella. Il nome del gruppo non è noto a priori.
    La query SELECT DISTINCT funziona bene, mi dice quali sono i gruppi in modo univoco.
    Quello che non riesco a fare è inserire tutti questi dati nella tabella b
    L'ultima query (posta a titolo di esempio fuori dal ciclo FOR) si ferma al primo record. Ho provato a inserirla divercamente, a usare WHILE invece di FOR ma nulla da fare.
    Ho bisogno di inserire nella tabella b tutti i dati provenienti da SELECT DISTINCT

    Dove sbaglio?

    Cordialmente,

    Marco P.


  • Super User

    non so bene se su mysql funziona:
    insert into nometabella (gruppo) values (select distinct(campo) from tabella where condizione)

    questa mattina non ho tempo per provare, magari stassera la provo se non l'hai fatto tu.

    :ciauz:


  • User Newbie

    [EDIT BY SMS]
    mi raccomando: ogni volta che devi scrivere un codice utilizza l'apposito tag [ code]
    [/EDIT]

    Ciao, grazie per la risposta ma nulla da fare, sembra che SELECT DISTINCT(nome campo) sia fastidioso...

    il bello è che se faccio scirvere il risultato in un file di testo, i gruppi vengono scritti per benino. Se provo a mettere l'SQL per l'INSERT in una tabella diversa ottengo o solo il primo risultato (nel caso la query sia posta al di fuori del ciclo for o il nome del primo gruppo ripetuto x volte.

    Ecco il nuovo listato con l ascrittura corretta del risultato in un file di testo!

    <HTML>
    <BODY bgcolor="ffffcc">
    <?
    // file lista_gruppi.php 
    
    include &#40;"conf.inc.php"&#41;;
    
    $sql = 'TRUNCATE TABLE `gruppi`'; 
    $query = mysql_query &#40;$sql, $connessione&#41; or die &#40;"Problemi con l'azzeramento del DB"&#41;;
    
    $sql = 'ALTER TABLE `gruppi` pack_keys=0 checksum=0 delay_key_write=0 auto_increment=1';
    $query = mysql_query &#40;$sql, $connessione&#41; or die &#40;"Problemi con la riorganizzazione del DB"&#41;;
    
    $sql = "select DISTINCT&#40;txtnomegruppo&#41; FROM $tabella";
    $query = mysql_query&#40;$sql, $connessione&#41; or die &#40;"Problemi con la visualizzazione della lista utenti"&#41;;
    
    $num = mysql_num_rows&#40;$query&#41;;
    
    echo " **$num** record trovati
    ";
    
    echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\">
            <tr> 
              <td width=\"10%\">Nome Gruppo</td>
            </tr>
          </table>";
    
    
    $fp = fopen&#40;'gruppi.txt','w'&#41;;
    flock&#40;$fp,2&#41;;
    $acapo = chr&#40;13&#41;.chr&#40;10&#41;;
    fputs &#40;$fp, "ELENCO GRUPPI$acapo"&#41;;
    
    for &#40;$i=0; $i<$num; $i++&#41;
    &#123;
     $gruppo = mysql_result&#40;$query, $i, "txtnomegruppo"&#41;;
    
     echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\">
            <tr> 
              <td width=\"10%\">$gruppo </td>
            </tr>
          </table>";
    
    fputs &#40;$fp, "$gruppo$acapo"&#41;;
    &#125;
    
    $sql = "insert into gruppi &#40;id, txtnomeGruppo&#41; VALUES &#40;'', '$gruppo'&#41;";
    $query = mysql_query &#40;$sql, $connessione&#41; or die &#40;"Errore!!!"&#41;;
    
    
    
    
    
    mysql_close&#40;$connessione&#41;;
    
    ?>
    </BODY>
    </HTML>
    
    

    io continuo a cercare una soluzione diversa.

    Ciao,

    Marco P.


  • User Newbie

    La soluzione migliore è la seguente:

     
    include &#40;"conf.inc.php"&#41;;
    $sql = "TRUNCATE TABLE `gruppi`"; 
    $query = mysql_query &#40;$sql, $connessione&#41; or die &#40;"Problemi con l'azzeramento del DB"&#41;; 
    
    $sql1 = "insert into gruppi &#40;txtnomeGruppo&#41;
             select DISTINCT&#40;txtnomeGruppo&#41; 
             FROM $tabella WHERE txtnomeGruppo <> '' "; 
    
    $query1 = mysql_query&#40;$sql1, $connessione&#41; 
              or die &#40;"Problemi con la copia della lista utenti ". mysql_error&#40;&#41; &#41;; 
    
    $sql3 = "SELECT * FROM gruppi ORDER BY txtnomeGruppo ASC";
    $query3 = mysql_query&#40;$sql3, $connessione&#41;;
    while &#40; $row = mysql_fetch_assoc&#40;$query3&#41;&#41; &#123;
            echo "$row&#91;txtnomeGruppo&#93; 
    " ;
            &#125;
    
    mysql_close&#40;$connessione&#41;;
    
    

    Ora devo contare tutte le persone che nella tabella maremonti hanno il mome gruppo uguale a quello della tabella gruppi (stesso nome campo).

    Come faccio?

    Grazie...

    Marco