Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407

    [MYSQL] Control Flow Functions, si possono usare solo con i SELECT?

    dal manuale le funzioni di controllo (ad esempio IF) si possono usare solo nelle select?

    io avrei necessità di usare un if in un update, qualcosa del tipo

    Codice PHP:
    UPDATE
    magazzino_oggetti
    INNER JOIN magazzino_movimenti ON 
    magazzino_oggetti.id magazzino_movimenti.idOggetto )
    SET magazzino_oggetti.giacenza = ( magazzino_oggetti.giacenza magazzino_movimenti.quantita )
    WHERE magazzino_movimenti.id '$idMovimento' 
    nel caso sia uno scarico, ma se è un carico dovrei fare l'addizione invece che la sottrazione..
    il tipo di movimento lo definisco con la colonna tipo ENUM('0','1') nella tabella magazzino_movimento (0 = scarico, 1 = carico)

    però, la query che ho scritto non funzionano, mi crasha proprio nel IF
    Codice PHP:
    //prova 1
    UPDATE
    magazzino_oggetti
    INNER JOIN magazzino_movimenti ON 
    magazzino_oggetti.id magazzino_movimenti.idOggetto )
    IF(
    magazzino_movimenti.tipo '0'SET magazzino_oggetti.giacenza = ( magazzino_oggetti.giacenza magazzino_movimenti.quantita ), SET magazzino_oggetti.giacenza = ( magazzino_oggetti.giacenza magazzino_movimenti.quantita ))
    WHERE magazzino_movimenti.id '$idMovimento'

    //prova 2
    UPDATE
    magazzino_oggetti
    INNER JOIN magazzino_movimenti ON 
    magazzino_oggetti.id magazzino_movimenti.idOggetto )
    SET magazzino_oggetti.giacenza = IF(magazzino_movimenti.tipo '0'magazzino_oggetti.giacenza magazzino_oggetti.quantitamagazzino_oggetti.giacenza magazzino_oggetti.quantita)
    WHERE magazzino_movimenti.id '$idMovimento' 

    ..il tutto sarebbe risolvibile con un if nel codice php, ma vorrei farlo nella query...
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  2. #2
    Non saprei se fosse possibile però potresti risolvere tutto in due query update, dove in una alla where aggiungi magazzino_movimenti.tipo = '0' e quì esegui lo "scarico" e una con magazzino_movimenti.tipo = '1' e quì esegui il carico, forse le puoi eseguire tutte e due contemporaneamente mettendo il ;

    Prova

  3. #3
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da Debiru
    Non saprei se fosse possibile però potresti risolvere tutto in due query update, dove in una alla where aggiungi magazzino_movimenti.tipo = '0' e quì esegui lo "scarico" e una con magazzino_movimenti.tipo = '1' e quì esegui il carico, forse le puoi eseguire tutte e due contemporaneamente mettendo il ;

    Prova
    ehm, non hai capito: io volevo fare una query che in base al tipo di movimento, mi eseguisse in automatico o il carico o lo scarico..

    attualmente il mio codice è:

    Codice PHP:
    list($tipo) = mysql_fetch_array(mysql_query("SELECT tipo FROM magazzino_movimenti WHERE id='$idMovimento'"));

    if(
    $tipo == 0){
    //scarico
    }else{
    //carico

    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  4. #4
    Ah, ora ho capito, ma allora mi sa che solo da codice lo si può fare.

    Il dato che ti indica che tu stia facendo un carico o uno scarico è qualcosa che ti arriva da codice e non da sql, quindi sei tu che tramite codice devi formare una query ad hoc in base ai dati in tuo possesso.


  5. #5
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    Originariamente inviato da Debiru
    Il dato che ti indica che tu stia facendo un carico o uno scarico è qualcosa che ti arriva da codice e non da sql
    no, non ci capiamo.. il dato (colonna tipo) è nel database, quindi riesco a lavorarlo tramite query, e in altre query già lo faccio con degli if, ma in query select..

    il mio dubbio è se proprio non posso usare l'istruazione IF in una query update, o se sbaglio qualcosa nella sintassi
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  6. #6
    Già, è vero, in MS SQL esistono le così dette transact sql, non so se esistano anche in mysql, ma alla fine tocca vedere se il fine giustifica i mezzi.

    Ovvero, tu stai cercando di giostrare il tutto tramite una query sql, stai in un certo senso complicando una cosa che in realtà è semplice.

    Ti dovresti chiedere se secondo te ti conviene fare quello che devi fare.

    A parte le prestazioni e difficoltà pensa anche a questo, un giorno potresti doverci rimettere le mani

    Te lo dico per esperienza, anche io anni addietro ho fatto voli pindarici con il codice e con sql per fare cose prestanti con minor spazio, ma quando a distanza di tempo ci devi rimettere le mani ci diventi scemo

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.