Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22

Discussione: mysql con controllo

  1. #11
    mi spiace quando credevo di essermi spiegato bene ed invece risulta non sia vero.

    ci riprovo.

    La tua query ha il seguente significato:

    inserisci una riga nuova se non esiste gia' la chiave unica. Se esiste di gia' la chiave unica non inserire una riga nuova ma aggiorna, se il caso, la riga esistente con i nuovi dati.

    Siamo d'accordo fin qui? Yes, si, oui ???? Se non siamo d'accordo significa che fai una cosa errata.

    Mysql, che non e' scemo, NON AGGIORNA un record con gli stessi dati, ma solo se almeno uno dei dati e' diverso. Quindi serve 'na mazza mettere le if nell'update.

    A questo punto la tua query, siccome quello che fai e' un INSERT oppure un UPDATE oppure nulla, rende il numero delle righe "lavorate" dalla query stessa:

    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.

    quindi se fai un controllo con mysql_affected_rows a seconda del numero ricevuto saprai se:

    0 righe ---> ha fatto nulla
    1 riga ---> ha insertito un record nuovo
    2 righe ---> ha cancellato (azione 1) e riscritto (azione 2) il record modificandolo.

    Se ancora non mi sono spiegato vado a fare un salto (con l'elastico) dal ponte delle streghe.



    @ edit..... e metti le apici ai valori stringa. Cioe', almeno scrivere correttamente la query. E pure la IF.... scrivi come previsto dal manuale - ON DUPLICATE KEY UPDATE -

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

  2. #12
    un esempio della tua query:

    codice:
    $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 UPDATE 
               Prezzo='$prezzo', Arrivo='$arrivo', Disponibilita='$disponibilita', aggiornato = 1 ";
    in questo modo se fa l'update ti mette anche il campo aggiornato ad 1. Ma se vuoi sapere cosa ha fatto dovrai pur sempre fare in qualche modo una query di controllo ... giusto?

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

  3. #13
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    Grazie per la tua pazienza ma mysql_affected_rows mi ritorna sempre 2 anhe quando i dati che voglio inserire sono identici a quelli gia esistenti

  4. #14
    Originariamente inviato da nixxo85
    Grazie per la tua pazienza ma mysql_affected_rows mi ritorna sempre 2 anhe quando i dati che voglio inserire sono identici a quelli gia esistenti
    certo, si vede che aggiorna il campo "aggiornato=1"

    se non lo vuoi allora fai come ti avevo detto prima. Toglilo dall'update e poi controlli il valore che ricevi e l'aggiorni dopo.

    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. #15
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    ho provato il sitema che dici tu funziona con una sintassi del tipo

    UPDATE table SET campo=valore WHERE id=N

    ma nn funziona con la sintassi che uso io

    $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 UPDATE
    Prezzo='$prezzo', Arrivo='$arrivo', Disponibilita='$disponibilita' ";

    non modifico altri campi, se sicuro che deve funzionare?
    leggendo il manuale mysql ce scritto che ritona 1 riga convolta in caso di record nuovo e 2 righe in caso di Update ma nel mio caso aggiorna sempre Uffa

  6. #16
    lo sai tu cosa hai nelle variabili e nel database.

    stampa la query.

    echo $insert;

    almeno ti renderai conto se ci sono differenza tra il contenuto delle variabili ed il contenuto della tabella. Basta uno spazio per fare la differenza....

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

  7. #17
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    Ho stampato a video la query e non essitono differenze , ho anche costruito apposta per fare le pove ma il risultato e sempre lo stesso mi da 2 come righe interessato , se potessi postarmi un esempio di codice te ne sarei grato in quanto sono un pomeriggio che provo senza risultato grazie con la sintassi di update funonzia con Insert ecc ecc non ce storia e nn risco a capire perche

  8. #18
    Originariamente inviato da nixxo85
    Ho stampato a video la query e non essitono differenze , ho anche costruito apposta per fare le pove ma il risultato e sempre lo stesso mi da 2 come righe interessato , se potessi postarmi un esempio di codice te ne sarei grato in quanto sono un pomeriggio che provo senza risultato grazie con la sintassi di update funonzia con Insert ecc ecc non ce storia e nn risco a capire perche
    postalo tu il codice che usi.... posso mica fare invenzioni.

    In ogni caso per fare le cose in modo corretto dovresti:

    1) mettere dei valori con id non esistente nel db (dovresti ricevere 1)

    2) ripetere la stessa query con gli stessi valori (dovresti ricevere 0)

    3) ora modifica anche un solo valore mantenendo sempre lo stesso id (dovresti ricevere 2)

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

  9. #19
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    170
    ho fatto questa tabella di prova con questa insert
    Codice PHP:
      $sqlInsert="INSERT IGNORE INTO prova (id,titolo_prodotto,nome_prodotto,prezzo) VALUE (NULL,'$id_prodotto','$nome_prodotto','$prezzo') ON DUPLICATE KEY UPDATE prezzo='$prezzo'";
      
    mysql_query($sqlInsert);
      echo 
    "esecuzione".mysql_affected_rows(); 
    chiave unica id_Prodotto,nome_Prodotto

    questa query restituisce solo 2 sempre .

    Comunque ti spiego cosa voglio ottenere magari sbaglio strada

    io vorrei che date due tabelle identiche di struttura ma con dati diversi in alcuni campi ottenere una terza tabella con solo i record diversi tra la prima e la seconda tabella e per questo motivo che ho pensato di inserire un campo in modo per sapere i record modificati e crearmi questa benedetta terza tabella ma magari esiste una via piu facile ,breve non so piu che pesci prendere
    io vorrei una roba del genere

    Tabella_nuova
    1|34|prova articolo|10.00
    2|35|prova articolo1|12.00
    3|36|prova articolo2|15.00
    4|37|prova articolo3|9.00

    Tabella_vecchia
    1|34|prova articolo|10.00
    2|35|prova articolo1|10.00
    3|36|prova articolo2|15.00
    4|37|prova articolo3|9.50

    Tabella_differenze con record della tabella nuova
    2|35|prova articolo1|12.00
    4|37|prova articolo3|9.00

    come posso realizzarla?

  10. #20
    boh! sicuramente la via insert ... update... non e' la piu' praticabile. Tra l'altro IGNORE che ci fa?

    non mi e' ancora capitata una query del genere. Vediamo...

    codice:
    create table differenza
    select tn.id, tn.titolo_prodotto, tn.nome_prodotto, 
    tn.prezzo as nuovo_prezzo, tv.prezzo as vecchio_prezzo
    from tabella_nuova tn
    inner join tabella_vecchia tv using (id)
    where tn.prezzo != tv.prezzo
    ovviamente la prima volta sara' create table e poi sara solo insert into table.

    dovrebe funzionare... avrai una tabella con 5 campi.

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