Visualizzazione dei risultati da 1 a 9 su 9

Discussione: update where

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    53

    update where

    salve

    ho fatto uno script che tramite una query di selcect con inner join tra due tabelle mi recupera dei valori, queste due tabelle discordano sulla quantita di questi valori

    ossia nella tab_A ho 918 valori per il campo codice e nella tab_B 7100 per il campo codice

    con la select inner join tra le due recupero solo i codici uguali.

    Dopo la select però devo eseguire un update su una delle due tabelle.
    Devo aggiornare il campo id_prodotto solo per i codici uguali.

    es.

    Campi tab_A id_prodotto, codice) 7100 codici ,id_prodotto =vuoto
    Campi tab_B id_prodotto, codice) 918 codici ,id_prodotto = 918 valori

    con la inner join recupero dalle tabelle i due campi li confronto estraggo solo quelli uguali.
    con la query di update devo popolare il campo id_prodotto della tab_A con i valori della tab_B

    se non fosse che mi restituisce un errore di limite di tempo.

    codice:
    $query3 = "UPDATE tab_A SET 
    id_prodotto ='$id'         
    WHERE '$codice' = '$codice_tabB'"; 
     $result3 = mysql_query($query3);
    l'update io penso che si blocchi quando non trova corrispondenza tra i codici.

    come posso inserire un controllo di eseguire l'update solo per i codici uguali?

  2. #2
    non serve la select ma solo un update multitable.

    codice:
    $query3 = "UPDATE tab_A, tab_B 
    SET tab_A.id_prodotto = '$id'         
    WHERE tab_A.codice = tab_B.codice
    AND tab_A = '$qualcosa' ";
    
     $result3 = mysql_query($query3);
    questa e' solo una indicazione generica di come eseguire un update multitable. Per fare quello che ti serve dovrai mettere tu i valori coerenti. E prova prima su una copia della tabella perche' la query, se male strutturata, non perdona.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    53
    grazie piero.mac ma io devo aggiornare solo una tabella

    con i valori id_prodotto recuperati dal campo id_prodotto dell'altra

    il problema è che quella da popolare ha un numero di elementi maggiori ne ha 7100
    e quella dalla quale recupera i valori ne ha 918

    quindi quando aggiorna quella con 7100 si blocca perchè non trova corrispondenza per i restanti
    id....

    mi ci vorrebbe un controllo nel "WHERE" dell'update

    codice:
    WHERE codice = '%$codice_tabB%'";
    tipo posso mettere un if nell'update???

  4. #4
    codice:
    $query3 = "UPDATE tab_A, tab_B 
    SET tab_A.id_prodotto = '$id'         
    WHERE tab_A.codice = tab_B.codice
    AND tab_A.altro_campo = '$qualcosa' ";
    aggiorna solo una delle due tabelle.

    la query dice:

    utilizzando le tabelle tab_a e tab_b
    set in tabella tab_a l'id_prodotto = a $id
    where il codice di tab_A e' uguale al codice di tab_B
    con l'ulteriore condizione che in tab_a un altro campo (aggiunto) sia uguale ad altra condizione.

    Come funziona? seleziona tutti i record dove il campo codice e' uguale ed applica alla tabella tab_A la modifica al campo id_prodotto.

    Quindi corrisponde (di molto al meglio) alla query select + update. Provare per credere.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    53
    ciao piero.mac

    ho provato la tua soluzione

    codice:
    $query2 = "UPDATE tabA, tabB  SET tabA.id_prodotto = '$id'  
        WHERE tabA.codice = tabB.codice_tabB ";
    ma mi si pianta....

    mi restituisce l'errore

    Fatal error: Maximum execution time of 30 seconds exceeded in
    però il primo valore lo assegna me lo mostra corretto

    mi mostra il codice della tabA con il suo id_prodotto il codice corrispondente della tabB con lo stesso id_prodotto

    però non va avanti

  6. #6
    Originariamente inviato da alfystu

    ma mi si pianta....

    mi restituisce l'errore
    spero tu non stia eseguendo l'update dentro ad un ciclo while o for.....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    53
    si.... non devo?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    53
    ho tolto l'update dal ciclo però ora mi inserisce come id_prodotto solo il primo valore ripetuto per tutti non incrementa

  9. #9
    Originariamente inviato da alfystu
    ho tolto l'update dal ciclo però ora mi inserisce come id_prodotto solo il primo valore ripetuto per tutti non incrementa
    incrementa cosa?

    mi pare di capire che non hai spiegato per bene cosa vuoi fare. Da dove arriva $id ???

    Vediamo: se devi trasferire il valore id_prodotto da B ad A nei record che equivalgono come codice allora la query sara':

    codice:
    $query3 = "UPDATE tab_A, tab_B 
    SET tab_A.id_prodotto = tab_B.id_prodotto         
    WHERE tab_A.codice = tab_B.codice ";
    ma non incrementa nulla. Si limita a copiare l'id_prodotto da una tabella all'altra in corrispondenza dei record con ugual codice.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.