- Home
- Categorie
- Coding e Sistemistica
- PHP
- query nidificata
-
query nidificata
<? include ("conf.inc.php"); $sql = 'TRUNCATE TABLE `gruppi`'; $query = mysql_query ($sql, $connessione) or die ("Problemi con l'azzeramento del DB"); $sql = 'ALTER TABLE `gruppi` pack_keys=0 checksum=0 delay_key_write=0 auto_increment=1'; $query = mysql_query ($sql, $connessione) or die ("Problemi con la riorganizzazione della tabella gruppi"); echo "<h2 align=\"center\">Elenco Studenti </h2>"; $sql = "SELECT DISTINCT(txtnomeGruppo) FROM `maremonti` LIMIT 0, 10000"; $query = mysql_query ($sql, $connessione) or die ("Errore !!"); $num = mysql_num_rows($query); echo " $num gruppi trovati "; echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\"> <tr> <td width=\"60%\">Nome Gruppo</td> </tr> </table>"; for ($i=0; $i<$num; $i++) { $gruppo = mysql_result($query, $i, "txtnomeGruppo"); echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\"> <tr> <td width=\"60%\">$gruppo </td> </tr> </table>"; } $sql2 = "INSERT INTO gruppi (id, txtnomeGruppo) VALUES ('', '$gruppo')"; $query = mysql_query ($sql2, $connessione) or die ("Errore!!!"); mysql_close($connessione); ?>
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 DISTINCTDove sbaglio?
Cordialmente,
Marco P.
-
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.
-
[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 ("conf.inc.php"); $sql = 'TRUNCATE TABLE `gruppi`'; $query = mysql_query ($sql, $connessione) or die ("Problemi con l'azzeramento del DB"); $sql = 'ALTER TABLE `gruppi` pack_keys=0 checksum=0 delay_key_write=0 auto_increment=1'; $query = mysql_query ($sql, $connessione) or die ("Problemi con la riorganizzazione del DB"); $sql = "select DISTINCT(txtnomegruppo) FROM $tabella"; $query = mysql_query($sql, $connessione) or die ("Problemi con la visualizzazione della lista utenti"); $num = mysql_num_rows($query); 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('gruppi.txt','w'); flock($fp,2); $acapo = chr(13).chr(10); fputs ($fp, "ELENCO GRUPPI$acapo"); for ($i=0; $i<$num; $i++) { $gruppo = mysql_result($query, $i, "txtnomegruppo"); echo "<table width=\"60%\" border=\"1\" cellspacing=\"4\" cellpadding=\"4\"> <tr> <td width=\"10%\">$gruppo </td> </tr> </table>"; fputs ($fp, "$gruppo$acapo"); } $sql = "insert into gruppi (id, txtnomeGruppo) VALUES ('', '$gruppo')"; $query = mysql_query ($sql, $connessione) or die ("Errore!!!"); mysql_close($connessione); ?> </BODY> </HTML>
io continuo a cercare una soluzione diversa.
Ciao,
Marco P.
-
La soluzione migliore è la seguente:
include ("conf.inc.php"); $sql = "TRUNCATE TABLE `gruppi`"; $query = mysql_query ($sql, $connessione) or die ("Problemi con l'azzeramento del DB"); $sql1 = "insert into gruppi (txtnomeGruppo) select DISTINCT(txtnomeGruppo) FROM $tabella WHERE txtnomeGruppo <> '' "; $query1 = mysql_query($sql1, $connessione) or die ("Problemi con la copia della lista utenti ". mysql_error() ); $sql3 = "SELECT * FROM gruppi ORDER BY txtnomeGruppo ASC"; $query3 = mysql_query($sql3, $connessione); while ( $row = mysql_fetch_assoc($query3)) { echo "$row[txtnomeGruppo] " ; } mysql_close($connessione);
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