Visualizzazione dei risultati da 1 a 8 su 8

Discussione: condizione IF in query

  1. #1
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012

    condizione IF in query

    buongiorno a tutti

    ho una tabella 'utenti' in cui ho (scremando per l' evenienza) 5 campi

    nome
    cognome
    ragione_sociale
    username
    password

    in cui raccolgo dei dati utente.

    nell' aggiornamento da un gestionale, mi arrivano questi dati e, di conseguenza per non perdere quelli esistenti faccio un UPDATE tmp_utenti SELECT * FROM utenti.

    nel processo di recupero dati precedentemente messi in tmp_utenti dovrei settare dei dati di default in base ai dati personali delle nuove righe inserite quindi

    update utenti set username=Ragione_Sociale,password=MD5(Codice) where (username IS NULL OR username='') AND (password IS NULL OR password='')

    la query è parzialmente corretta in quanto dò per scontato che la Ragione_Sociale mi arriva.. ma se il gestionale mi invia invece nome e cognome (dipende dal cliente questo, se è azienda o privato)? come posso verificare questa condizione e quindi dare a username un valore in base all' evenienza??

    grassie per le risposte

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  2. #2
    Inserire logica applicativa di quel tipo in una query non è la soluzione migliore. O utilizzi una stored procedure oppure esegui la manipolazione in PHP in modo da avere un controllo maggiore.

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    il controllo esiste già lato gestionale: o nome e cognome oppure ragione sociale... non possono esistere entrambe in quanto queste sono regole fiscali e non dettate da una scelta incondizionata.

    i miei sono dati di default che l' utente dovrà aggiornare da se quando ne ha la necessità, viceversa rimangono quelli di default che imposto io su dati personali preesistenti in anagrafica.

    un IF in PHP sarebbe sicuramente la soluzione meno complessa, ma se voglio farlo in query (e si fà perchè mysql supporta il costruttore IF )? la vedo più elegante e rapida, tenendo conto che con 3 o 4000 utenti avrei un risparmio netto di tempo a parità di esecuzione tra PHP e query stessa.
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4
    http://dev.mysql.com/doc/refman/5.0/...functions.html

    Comunque continuo ad essere dell'opinione che inserire una logica del genere in una query non sia una buona idea. Per quanto riguarda le performance, non sono molto convinto che siano molto inferiori (al massimo crei il file SQL pronto per l'esecuzione e lo dai in pasto a mysql).

  5. #5
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    SELECT IF sarebbe perfetto, se solo eseguisse anche istruzioni e non gestisse SOLO un dato da restituire....

    questa la prova e lo speudo comportamento che dovrebbe avere....

    Codice PHP:
    $sql="SELECT IF (utenti.Ragione_Sociale='',
                            UPDATE utenti set username=Cognome,password=MD5(Codice) where (username IS NULL OR username='') AND (password IS NULL OR password=''),
                            UPDATE utenti set username=Ragione_Sociale,password=MD5(Codice) where (username IS NULL OR username='') AND (password IS NULL OR password=''))"

    sta diventando anche una cosa di principio.. sai quanto viene comoda una cosa del genere?

    la query l' ho provata in diverse forme, e l'unico modo in cui possa funzionare è che nel result dell' operazione ottengo un dato di output.

    se per esempio utilizzo
    Codice PHP:
    SELECT if( (

    SELECT Nome
    FROM utenti
    WHERE ID 
    =10
    ) = '', (

    SELECT Codice
    FROM articoli
    WHERE ID 
    =10
    ), 'pluto' )
    LIMIT 0 30 
    perchè di ritorno all' espressione IF ottengo un dato....

    dove sono i guru!!!
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  6. #6
    SELECT IF sarebbe perfetto, se solo eseguisse anche istruzioni e non gestisse SOLO un dato da restituire..
    Perchè non provi così:

    Codice PHP:
    $sql "UPDATE utenti SET 
    username = IF (utenti.Ragione_Sociale = '', Cognome, utenti.Ragione_Sociale), 
    password = MD5(Codice) WHERE 
    (username IS NULL OR username = '') AND (password IS NULL OR password = '')"


  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da filippo.toso
    Perchè non provi così:

    Codice PHP:
    $sql "UPDATE utenti SET 
    username = IF (utenti.Ragione_Sociale = '', Cognome, utenti.Ragione_Sociale), 
    password = MD5(Codice) WHERE 
    (username IS NULL OR username = '') AND (password IS NULL OR password = '')"

    grande!!! funziona alla perfezione!

    ero io che mi complicavo la vita

    un' ultima cosa... per avere una concatenazione di Nome e Cognome con uno spazio tra i 2?
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8

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.