Visualizzazione risultati 1 fino 7 di 7

Discussione: Confronto array

  1. #1
    Guest

    Predefinito Confronto array

    Salve

    avrei un problemino

    io dovrei prendere dei dati da una tabella verificare che non esistano già in un altra ed inserire i nuovi nella seconda tabella

    in sostanza

    SELECT nome from tabella1

    il risultato poi devo trascriverlo in una seconda tabella evitando di riscrivere i nomi già esistenti.

    Ho pensato di risolvere così
    Codice PHP:
    $sqlquery = "SELECT * FROM tabella1";
    $dati=array();
    $result = mysql_query($sqlquery);
    while (
    $lin = mysql_fetch_array($result, MYSQL_ASSOC)){
    $dati1[]= $lin['nome1'];
    }
    $NOME1 = "'".implode("','", $dati1)."'";
    e poi
    Codice PHP:
    $sqlquery = "SELECT * FROM tabella2";
    $dati=array();
    $result = mysql_query($sqlquery);
    while (
    $lin = mysql_fetch_array($result, MYSQL_ASSOC)){
    $dati2[]= $lin['nome2'];
    }
    $NOME2= "'".implode("','", $dati2)."'";
    facendo l'echo di queste due variabili mi restituisce i nomi giusti ad esempio
    in tabella 1
    'Paolo','Michele','Giovanni'
    ed in tabella 2
    'Francesco','Antonio','Giovanni'

    ora dovrei fare un unica variabile escludendo i nomi uguali presenti enlla tabella 2
    quindi mi serivirebbe un $NOMINUOVI dove ci dovrebbe essere solo 'Paolo','Michele'

    questa variabile poi dovrei inserirla in tabella2

    suggerimenti?
    -
    Codice PHP:
    $qry2=mysql_query("SELECT * FROM tabella1 where ID_GROUP='36' ;
    while (
    $primo = mysql_fetch_array($qry2, MYSQL_ASSOC)) {
    $PR=$primo['nome'];
    echo
    $PR."<br>";
    $qry1=mysql_query("SELECT * FROM tabella2 where nuovo='$PR' ORDER by nuovo");//l'order by può o no servire
    while (
    $secondo = mysql_fetch_array($qry1)) {
    $SE=$secondo['nuovonome'];
    }
    }
    credo dia ver facilitato le cose così

    in pratica prendo i nomi all'interno del gruppo 36 della tabella1 e dopo rpendo gli id nella tabella2 se esiste il nome della tabella 1

    pe ripotesi mi basterebbe fare un

    INSERT INTO ma non saprei comefargli isnerire tutto escluso i doppioni
    Ultima modifica di darkwolf : 22-03-2011 alle ore 15.51.26

  2. #2
    Guest

    Predefinito

    Monital, dimmi se il tuo problema può riassumersi come sotto:

    tutti i nomi presenti in tabella1.ID_GROUP='36'
    che NON sono presenti in tabella2.nomeCampo
    vanno aggiunti a tabella2.nomeCampo


    Perché se è così ragiono meglio, e magari mi viene in mente una soluzione.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da webeginner Visualizza messaggio
    Monital, dimmi se il tuo problema può riassumersi come sotto:

    tutti i nomi presenti in tabella1.ID_GROUP='36'
    che NON sono presenti in tabella2.nomeCampo
    vanno aggiunti a tabella2.nomeCampo


    Perché se è così ragiono meglio, e magari mi viene in mente una soluzione.
    non potevi riassumere meglio

  4. #4
    Guest

    Predefinito

    Sicuramente ci sarà un modo per ottimizzare tutto, ma di primo acchito non riesco a trovare una strada più breve.

    Criterio:
    $nomiTabella_1=array(); // che verrà popolato con la prima query
    $nomiTabella_2=array(); // che verrà popolato con la seconda query

    ciclo sul primo array {

    se (l'elemento che scorre NON è contenuto dal secondo array) then
    insert into tabella2
    }

    Codice PHP:
    $nomiTabella_1=array();
    $sql = "SELECT * FROM tabella1 where ID_GROUP='36' ";
    $result = mysql_query($sql);
    while (
    $lin = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $nomiTabella_1[]=$lin['nome'];
    }


    $nomiTabella_2=array();
    $sql = "SELECT nomeCampo FROM tabella2 ";
    $result = mysql_query($sql);
    while (
    $lin = mysql_fetch_array($result, MYSQL_ASSOC)){
    $nomiTabella_2[]= $lin['nomeCampo'];
    }

    foreach (
    $nomiTabella_1 as $n) {

    if (!
    in_array($n,$nomiTabella_2)) {

    $sql = "INSERT INTO tabella2 (nomeCampo) VALUES ('$n') ";
    mysql_query($sql);
    }

    }
    Ultima modifica di webeginner : 22-03-2011 alle ore 13.55.39

  5. #5
    Guest

    Predefinito

    non mi fa l'insert forse è da usare il foreach pure per $nomeTabella_2
    -
    Citazione Originalmente inviato da Monital Visualizza messaggio
    non mi fa l'insert forse è da usare il foreach pure per $nomeTabella_2

    allora non mi faceva l'isnert operchè avevo sbagliaot il nome della tabella

    ora l'insert me lo fa però mi ripete i nomi già esistenti

    difatti ragionando sull'if te dici che se trova nomi diversi in nomiTabella2 di inserire $n ma $n altro non è che l'insieme dei nomi della prima tabella
    Ultima modifica di darkwolf : 22-03-2011 alle ore 15.52.23

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da Monital Visualizza messaggio
    allora non mi faceva l'isnert operchè avevo sbagliaot il nome della tabella

    ora l'insert me lo fa però mi ripete i nomi già esistenti
    Ma hai copiato pari pari il mio ciclo e l'if al suo interno? C'è il "!" prima di in_array()?

    Citazione Originalmente inviato da Monital Visualizza messaggio
    difatti ragionando sull'if te dici che se trova nomi diversi in nomiTabella2 di inserire $n ma $n altro non è che l'insieme dei nomi della prima tabella
    Certo che è l'insieme, ma ciascun nome ($n) viene elencato separatamente dagli altri. Dunque:

    if ($n NON E' CONTENUTO dall'array $nomiTabella_1) then
    insert to

    A me sembra che non faccia una grinza.

    Non è per caso che hai degli spazi prima o dopo ai nomi (in un caso "Giuseppe " e in un altro "Giuseppe") oppure che non sempre l'iniziale è maiuscola? Perché la funzione in_array è case sensitive.
    Eventualmente si risolve anche questo.
    Ultima modifica di webeginner : 22-03-2011 alle ore 15.39.38

  7. #7
    Guest

    Predefinito

    dato che la nuova tabella è nuova ho semplicemente usato los cript e mi ha scrittoi due nomi della tabella1(intanto sono 2) poi ne ho cacnellato uno epr fare la prova e ridando l'input mi ha riscritto i due nomi

    mentre doveva scrivermene uno solo dato che l'altro già c'era
    -
    porca zozza

    non mi ero accorto che quando facevo la select della tabella2 il nome della tabella era sbagliato aveva la lettera finale al singolare

    me ne sono aaccorto facendo svariate prove

    grazie web funziona tutto a emraviglia


    GRAZIE GRAZIE GRAZIE
    Ultima modifica di darkwolf : 22-03-2011 alle ore 15.53.09

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •