Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Discussione: mysql con controllo

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170

    mysql con controllo

    salve a tutti ,
    vi spiego il mio prolbema :
    ho una tabella cosi formata
    id_Prodotto|id_Ubicazine|Codice_Prodotto|Prezzo|Ar rivo|Disponibilita

    adesso id_Prodotto,id_Ubicazione,Codice_Prodotto sono una chiave unica in quanto rendono l'articolo univoco
    con il seguente codice

    INSERT INTO Articoli (id_Prodotto........)Value($valore1......) ON DUPLICATE KEY UPDATE Prezzo=$prezzo,Arrivo=$arrivo,Disponibilita=$dispo nibilita

    in questa maniera se l'articolo ha stesso id ,ubicazione ,codice vado solo ad aggiornare i dati a variazione giornaliera adesso il problema e il seguente con questo codice io aggiorno SEMPRE i dati anche quando sono uguali come potrei verificare se almeno uno dei seguenti dati e cambiato e solo allora effettuare UPDATE ?? mi servirebbe un IF su piu campi prima dell'UPDATE è possibile ? grazie a tutti

  2. #2
    se ben ricordo, ON DUPLICATE KEY UPDATE ... si comporta in modo simile al REPLACE con la differenza che REPLACE cancella il record e scrive un id nuovo, mentre ON DUPLICATE KEY UPDATE cancella il record e lo riscrive con lo stesso id ma solo in caso di dati variati.

    Quindi in questo caso troverai due record variati (1 cancellato + 1 riscritto) nel caso di differenze nel record. Mentre troverai 0 record variati se il contenuto e' identico (allo stesso id) e 1 record variato se inserito perche' manca l'id.

    Recapitolando ... con mysql_affected_rows($link) troverai i valori:

    0 = il record esiste ed e' identico al contenuto della query insert. Nessuna variazione
    1 = il record NON esiste ed e' stato inserito. Trovi un nuovo record inserito
    2 = il record esisteva ed il contenuto dell'UPDATE era diverso dall'esistente e quindi ha rimosso il presente e riscritto l'aggiornato con lo stesso id del rimosso. Trovi il record aggiornato.

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    Grazie per la risposta faro due prove , il fatto e che una volta che ho il record convolto non penso di riuscirlo ad utilizzare cioè mi spiego io dovrei cambiare il valore di campo usato come flag con la query di insert in modo tale da che con un indice fatto a posta in un attimo con un'interrogazione mi ritornano i record aggiornati , mi spiego dovrei fare una cosa del tipo

    INSERT (..campi...) as (...valori...) ON DUPLICATE KEY IF ( CAMPO1!=VALORE1 OR CAMPO2!=2) THEN UPDATE ........>

    pero non so come scriverla
    Cosi facendo se l'articolo esiste e almeno uno degli altri campi (quelli non inclusi nella chiave UNIQUE) è diverso da quelli attuale li aggiorno e setto il campo update ad 1
    Viceversa se l'articolo esiste ma tutti altri campi sono tutti uguali non aggiorno nulla e il campo upadate resta di valore di default ad 0 , spero di essere stato abbastanza chiaro nella spiegazione

  4. #4
    Originariamente inviato da nixxo85
    Grazie per la risposta faro due prove , il fatto e che una volta che ho il record convolto non penso di riuscirlo ad utilizzare cioè mi spiego io dovrei cambiare il valore di campo usato come flag con la query di insert in modo tale da che con un indice fatto a posta in un attimo con un'interrogazione mi ritornano i record aggiornati , mi spiego dovrei fare una cosa del tipo

    INSERT (..campi...) as (...valori...) ON DUPLICATE KEY IF ( CAMPO1!=VALORE1 OR CAMPO2!=2) THEN UPDATE ........>

    pero non so come scriverla
    Cosi facendo se l'articolo esiste e almeno uno degli altri campi (quelli non inclusi nella chiave UNIQUE) è diverso da quelli attuale li aggiorno e setto il campo update ad 1
    Viceversa se l'articolo esiste ma tutti altri campi sono tutti uguali non aggiorno nulla e il campo upadate resta di valore di default ad 0 , spero di essere stato abbastanza chiaro nella spiegazione
    ma la risposta che ti ho dato contiene anche la soluzione....

    codice:
    parlato:
    
    if(mysql_affected_rows($connessione) == 2 )) {
    
    la tabella e' stata aggiornata
    update tabella campo_chek = 1 where id = $id_usato
    
    } elseif(mysql_affected_rows($connessione) == 1 )) {
    
    il record e' nuovo ed e' stato inserito
    
    } else { nessuna modifica effettuata  }

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

  5. #5
    Utente di HTML.it L'avatar di dararag
    Registrato dal
    Jan 2008
    Messaggi
    434
    la devi fare più o meno come hai scritto:
    Codice PHP:
    $insert="INSERT INTO articoli (id_Prodotto, id_Ubicazione, Codice_Prodotto) VALUES ($id_prod, id_ubi, $cod_prod) ON DUPLICATE KEY IF ((id_Prodotto!=$id_prod) OR (id_Ubicazione!=$id_ubi) OR (Codice_Prodotto!=$cod_prod)) THEN UPDATE articoli SET Prezzo=\"$prezzo\", Arrivo=\"$arrivo\", Disponibilita=\"$disponibilita\" WHERE id_Prodotto=$id_prod AND id_Ubicazione=$id_ubi AND Codice_Prodotto=$cod_prod"

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    Grazie mille era proprio quello che cercavo !!!! Funziona anche il metodo consigliatomi nel post precedente ma richiede un'ulteriori query che e quello che volevo evitare!! grazie a tutti

  7. #7
    Originariamente inviato da nixxo85
    Grazie mille era proprio quello che cercavo !!!! Funziona anche il metodo consigliatomi nel post precedente ma richiede un'ulteriori query che e quello che volevo evitare!! grazie a tutti

    ne sei proprio sicuro?
    Originariamente inviato da nixxo85
    Cosi facendo se l'articolo esiste e almeno uno degli altri campi (quelli non inclusi nella chiave UNIQUE) è diverso da quelli attuale li aggiorno e setto il campo update ad 1
    Viceversa se l'articolo esiste ma tutti altri campi sono tutti uguali non aggiorno nulla e il campo upadate resta di valore di default ad 0 , spero di essere stato abbastanza chiaro nella spiegazione
    spiegami come fai ad aggiornare il campo update = 1

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    non ho ancora provato il codice con IF Perche sostieni non si possa fare?

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    Allora vi posto il codice che uso al momento
    Codice PHP:
    $insert="INSERT INTO articoli (id_Prodotto, id_Ubicazione, Codice_Prodotto,Prezzo,Arrivo,Disponibilita) VALUES ($id_prod, id_ubi, $cod_prod,$prezzo,$arrivo,$disponibilita) ON DUPLICATE KEY IF UPDATE Prezzo=\"$prezzo\", Arrivo=\"$arrivo\", Disponibilita=\"$disponibilita\" "
    chiave unica su id_Prodotto,id_Ubicazione,Codice_Prodotto
    io vorrei modificare la query in modo da settare un campo update=1 se $prezzo,$arrivo,$disponibilita erano veramente diversi da quelli gia presenti

    La chiave unica mi serve solo per identificare in maniera univoca il prodoto

    Il codice suggertio da piero.mac (che ringrazio per il tempo che mi ha dedicato) con la funzione mysql_affected_rows($link) torna sempre lo stesso risultato in quanto una riga e sempre convolta nell'update
    come potrei risolvere il problema

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    Allora vi posto il codice che uso al momento
    Codice PHP:
    $insert="INSERT INTO articoli (id_Prodotto, id_Ubicazione, Codice_Prodotto,Prezzo,Arrivo,Disponibilita) VALUES ($id_prod, id_ubi, $cod_prod,$prezzo,$arrivo,$disponibilita) ON DUPLICATE KEY IF UPDATE Prezzo=\"$prezzo\", Arrivo=\"$arrivo\", Disponibilita=\"$disponibilita\" "
    chiave unica su id_Prodotto,id_Ubicazione,Codice_Prodotto
    io vorrei modificare la query in modo da settare un campo update=1 se $prezzo,$arrivo,$disponibilita erano veramente diversi da quelli gia presenti

    La chiave unica mi serve solo per identificare in maniera univoca il prodoto

    Il codice suggertio da piero.mac (che ringrazio per il tempo che mi ha dedicato) con la funzione mysql_affected_rows($link) torna sempre lo stesso risultato in quanto una riga e sempre convolta nell'update
    come potrei risolvere il problema i record sono 850.000 quindi una discreta quantita

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 © 2024 vBulletin Solutions, Inc. All rights reserved.