MySQL, SE ELSEIF nella query di selezione

Sto cercando di selezionare diversi prezzi di un prodotto in base alla quantità che l’utente sceglie.
Questa è la query che sto lavorando (non è un errore di sintassi):

 select id, 
    (SELECT 
    IF(qty_1<='23',price,1)
    ELSEIF(('23'>qty_1 && qty_2<='23'),price_2,1)
    ELSEIF(('23'>qty_2 && qty_3<='23'),price_3,1)
    ELSEIF('23'>qty_3,price_4,1)
    END IF) as total 
 from product;
  • si dovrebbe usare il CASO

 

5 Replies
  1. 156

    Hai quello che hai utilizzato nelle stored procedure come questo per riferimento, ma non sono destinati ad essere utilizzati come hai ora. È possibile utilizzare IF come mostrato da duskwuff. Ma un Case istruzione è migliore per gli occhi. Come questo:

    select id, 
        (
        CASE 
            WHEN qty_1 <= '23' THEN price
            WHEN '23' > qty_1 && qty_2 <= '23' THEN price_2
            WHEN '23' > qty_2 && qty_3 <= '23' THEN price_3
            WHEN '23' > qty_3 THEN price_4
            ELSE 1
        END) AS total
     from product;

    Questo sembra più pulito. Suppongo che non richiedono l’interno SELECT comunque..

    • Sì, in effetti, sembra meglio, ho scelto questa opzione, ma la sua buona per avere entrambi gli approcci per futuri riferimenti.. Grazie nawfal
    • Bello avere CASO essere utilizzato per SE. Grazie Nawfal
  2. 16

    IF() in MySQL è un ternario funzione, non una struttura di controllo — se la condizione del primo argomento è true, restituisce il secondo argomento; in caso contrario, restituisce il terzo argomento. Non vi è alcun corrispondente ELSEIF() funzione o END IF parola chiave.

    L’equivalente di quello che hai preso potrebbe essere qualcosa di simile:

    IF(qty_1<='23', price,
      IF('23'>qty_1 && qty_2<='23', price_2,
        IF('23'>qty_2 && qty_3<='23', price_3,
          IF('23'>qty_3, price_4, 1)
        )
      )
    )

    Le condizioni, non mi fanno senso (sembra che alcuni di loro possono essere inavvertitamente invertito?), ma senza sapere che cosa esattamente si sta cercando di fare, è difficile per me per risolvere questo problema.

    • immagino che un min fa… selezionare productoid, precio, precio_2, precio_3, SE(cant_1>23,precio, SE (23>cant_1 && cant_2>23,precio_2,SE (23>cant_2 && cant_3>23,precio_3,SE (23>cant_4,precio_4,1)))) totale da producto il fatto è che io non sono in grado di creare un stand-alone tabella di prezzo a causa del mio boss richiesta che sarebbe molto più facile fare un join e di ottenere il prezzo in base alla quantità…
    • più da vicino cosa sarebbe utilizzando case when (condition) then {computed value} when then else end
  3. 6

    Ho trovato un bug in MySQL 5.1.72 quando si utilizza il se nidificata() funzioni …. il valore della colonna variabili (ad esempio qty_1) è vuota all’interno, il secondo se(), rendendolo inutile. Utilizzare il seguente costrutto invece:

    case 
      when qty_1<='23' then price
      when '23'>qty_1 && qty_2<='23' then price_2
      when '23'>qty_2 && qty_3<='23' then price_3
      when '23'>qty_3 then price_4
      else 1
    end
  4. 3

    Per la tua domanda :

    SELECT id, 
       IF(qty_1 <= '23', price,
       IF(('23' > qty_1 && qty_2 <= '23'), price_2,
       IF(('23' > qty_2 && qty_3 <= '23'), price_3,
       IF(('23' > qty_2 && qty_3<='23'), price_3,
       IF('23' > qty_3, price_4, 1))))) as total 
    FROM product;

    È possibile utilizzare il if - else struttura di controllo o la IF funzione di MySQL.

    Di riferimento:

    http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/

    • Anche se la vostra risposta è corretta al 100%, potrebbe anche diventare il 100% inutile se il collegamento viene spostato, cambiato, unite in un’altra, o il sito principale scompare… 🙁 si prega, Pertanto, modifica la tua risposta, e copiare il relativo passi dal link nella vostra risposta, garantendo in tal modo la tua risposta per il 100% del tempo di vita di questo sito! 😉 Si può sempre lasciare il link in fondo la tua risposta come una sorgente per il materiale…
  5. 2

    Come per Nawfal la risposta, in CASO di dichiarazioni devono essere in una procedura. Ho trovato questo post, che mostra un brillante esempio di utilizzo di script in una routine, mentre ancora in fase di sviluppo e test. In sostanza, si crea, chiamata poi cadere la procedura:

    https://gist.github.com/jeremyjarrell/6083251

Lascia un commento