Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Confrontare valori array con valori database mysql

    Salve a tutti, non riesco a confrontare i valori di questo array
    codice:
     $products = [];
    foreach (array_keys($match[2]) as $idx)
    {
    	$tagliaprodotto = rtrim(substr($match[2][$idx],1));
    	$tagliaquantita = ltrim($match[3][$idx],'0');
    	$products[] = 	[
    		'prodotto'	=> $tagliaprodotto,
    		'quantita'	=> $tagliaquantita,
    		'terminale'	=> $match[4][$idx]
    					];
    }
    Con i valori presenti all'interno del database! Come dovrei fare?
    codice:
    $sth = $pdo->prepare("SELECT * FROM tabella");
    $sth->execute();
    $row = $sth->fetchAll();

  2. #2
    Mi spiego meglio: Ho questo array products = [] contenete prodotto quantita e terminale
    Ciò che vorrei fare è confrontare gli elementi che ho all'interno del database con quelli dell'array e fare delle if del tipo
    Se $tagliaprodotto non è presente nel database: [code]INSERT INTO tabella (prodotto, quantita, terminale, data) VALUES (rodotto, :quantita, :terminale, NOW())
    Se un record del database corrisponde perfettamente a: $tagliaprodotto,$tagliaquantita e $match[4][$idx] Non fare niente
    Se un record del database contiene: $tagliaprodotto uguale ma $tagliaquantita e/o $match[4][$idx] diversi:
    codice:
     UPDATE tabella SET quantita=:quantita, terminale=:terminale

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Io avevo un problema simile e ho risolto con "insert into ... on a duplicate key update"
    guarda qui: http://forum.html.it/forum/showthrea...readid=2960351

  4. #4
    Quote Originariamente inviata da Sonikag Visualizza il messaggio
    Io avevo un problema simile e ho risolto con "insert into ... on a duplicate key update"
    guarda qui: http://forum.html.it/forum/showthrea...readid=2960351
    Anche io usavo on duplicate key... ma adesso è sorto il bisogno di riconoscere le differenze... ti faccio l esempio pratico:
    se il prodotto non c è in tabella inserisci (anche la data), se il prodotto già c è e i valori quantita e terminale sono uguali non fare nulla, se il prodotto c é e i valori quantita e terminale variano UPDATE quantita terminale e data

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Prova questo.
    In ogni caso fai la modifica che i valori siano uguali o meno. Lo scopo è di determinare se esiste un record che combaci con i criteri di modifica. Se c’è un record allora viene aggiornato. Se i valori erano già presenti non cambia nulla se erano diversi allora sono aggiornate. Ma sappiamo che il record esiste.

    UPDATE tabella SET quantita=:quantita, terminale=:terminale
    Where <clausola da definire>

    Eseguito l’update, prendi il valore del PDO rowcount
    http://php.net/manual/en/pdostatement.rowcount.php

    Se ti torna 0, cioè nessun record aggiornato, allora fai l’insert.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Scusa badaze ma non ho capito
    Praticamente mi consigli di usare una query tipo

    INSERT INTO tabella (prodotto, quantita, terminale, data) VALUES (:prodotto,:quantita,:terminale, NOW())Poi faccio l' UPDATE ma che clausola potrei usare per ottenere ci� che voglio?
    Io vorrei che se esiste un record(quindi bisognerebbe estrarre l'array dal database di ogni singolo record) e se � identico non deve fare nulla mentre se prodotto esiste ma terminale E/O quantita sono diversi aggiorna i loro valori insieme alla data! Con l'update come faccio? Se facessi qualcosa del genere:
    codice:
    UPDATE tabella SET quantita=:quantita, terminale=:terminale, data=NOW() WHERE prodotto = $tagliaprodotto AND (quantita != $tagliaquantita or terminale = $match[4][$idx]) or (quantita = $tagliaquantita or terminale != $match[4][$idx])
    Adesso nn posso provare ma secondo te potrebbe andare?

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Devi prima provare a fare l’update. Se nulla viene aggiornato (usando rowcount guarda il link che ho postato) significa che nessun record combacia con la chiave usata per l’update. Quindi puoi fare l’insert.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Devi prima provare a fare l’update. Se nulla viene aggiornato (usando rowcount guarda il link che ho postato) significa che nessun record combacia con la chiave usata per l’update. Quindi puoi fare l’insert.
    Continuo a nn capire....

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Non c'è nulla di complicato.

    Hai dei dati. Se non sono presenti nella tabella li devi aggiungere. Se sono già presenti li devi aggiornare. Non capisco che cosa non capisci.

    Primo passo :
    Provo a fare un update del record che corrisponde al prodotto con cui sto lavorando.

    Caso 1 - L'update aggiorna un record nella tabella allora mi fermo.

    Caso 2 - L'update non aggiorna alcun record. Questo significa che non esiste alcun record che corrisponde alla chiave univoca (ovvero il prodotto). Allora passo al secondo passo.

    Secondo passo :
    Visto che non esiste alcun record che corrisponde al mio prodotto faccio un insert dei dati.

    Per sapere uno o dei record è/sono stato/i aggiornato/i bisogna usare il rowcount (vedere il link nel mio primo messaggio).

    Nella discussione, scrivi che non aggiorni se i dati sono identici. Io propongo di aggiornare anche se sono uguali (cioè di aggiornare sempre) perché aggiornando un record con gli stessi valori è come se tu non avessi fatto niente tranne il fatto che con rowcount eseguito dopo l'update sai se c'è stato o non c'è stato un record aggiornato.

    Altrimenti dovresti fare una select per vedere se il prodotto esiste o no nella tabella. Poi a secondo del risultato fare un update o un insert. Quindi avrai sempre due accessi alla tabella. Mentre con il mio sistema hai un solo accesso nel caso dell'update e due nel caso dell'insert.

    Se non hai ancora capito allora mi arrendo.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Non c'è nulla di complicato.

    Hai dei dati. Se non sono presenti nella tabella li devi aggiungere. Se sono già presenti li devi aggiornare. Non capisco che cosa non capisci.

    Primo passo :
    Provo a fare un update del record che corrisponde al prodotto con cui sto lavorando.

    Caso 1 - L'update aggiorna un record nella tabella allora mi fermo.

    Caso 2 - L'update non aggiorna alcun record. Questo significa che non esiste alcun record che corrisponde alla chiave univoca (ovvero il prodotto). Allora passo al secondo passo.

    Secondo passo :
    Visto che non esiste alcun record che corrisponde al mio prodotto faccio un insert dei dati.

    Per sapere uno o dei record è/sono stato/i aggiornato/i bisogna usare il rowcount (vedere il link nel mio primo messaggio).

    Nella discussione, scrivi che non aggiorni se i dati sono identici. Io propongo di aggiornare anche se sono uguali (cioè di aggiornare sempre) perché aggiornando un record con gli stessi valori è come se tu non avessi fatto niente tranne il fatto che con rowcount eseguito dopo l'update sai se c'è stato o non c'è stato un record aggiornato.

    Altrimenti dovresti fare una select per vedere se il prodotto esiste o no nella tabella. Poi a secondo del risultato fare un update o un insert. Quindi avrai sempre due accessi alla tabella. Mentre con il mio sistema hai un solo accesso nel caso dell'update e due nel caso dell'insert.

    Se non hai ancora capito allora mi arrendo.
    Purtroppo nn posso seguire questa logica... parliamo sempre dello stesso maledettissimo file!
    Non posso eseguire l aggiornamento perchè se c è stata una modifica vorrei aggiornare anche la data e inserendo sempre i prodotti aggiornerei anche la data

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.