Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875

    E' possibile un ciclo if dentro a una query?

    vorrei mettere un ciclo if dentro una query prima della clausula where, e' possibile?

    in pratica vorrei fare qualcosa tipo

    Codice PHP:
    $query=("SELECT * 
                 FROM tabella"
    )
     if(
    notti=2) echo where notti=2
     
    if(notti=3) echo where notti=3
    ecc ecc 
    come posso farlo?

  2. #2
    non e' chiaro il dilemma....

    prova con CASE

    codice:
    $query=("SELECT *,
             CASE
             when notti = 2 then 2
             when notti = 3 then 3
             when notti = 4 then 4
             else 0
             END as tipo          
                 FROM tabella");

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

  3. #3
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    Originariamente inviato da piero.mac
    non e' chiaro il dilemma....

    prova con CASE

    codice:
    $query=("SELECT *,
             CASE
             when notti = 2 then 2
             when notti = 3 then 3
             when notti = 4 then 4
             else 0
             END as tipo          
                 FROM tabella");
    in pratica devo fare la query in base al numero di notti... ma solo il where

  4. #4
    dici come si strutturano la/le tabella/e coinvolta/e e cosa vuoi estrarre dalla query altrimenti non ci si capisce
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  5. #5
    mi chiedo allora che c'azzecca la query. metti il valore cercato in una variabile e usa questa nella query.

    codice:
    $notti = 2;
    
    select *
    from tabella
    where notti = $notti

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

  6. #6
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    non posso mettere where notti=$notti perche' io devo fare la query in base al numero di notti.

    se sono 2 notti per esempio deve dire maggiore di x
    se sono 3 notti deve dire = a x
    se sono 4 notti deve dire <= a x

  7. #7
    Originariamente inviato da allin81
    non posso mettere where notti=$notti perche' io devo fare la query in base al numero di notti.

    se sono 2 notti per esempio deve dire maggiore di x
    se sono 3 notti deve dire = a x
    se sono 4 notti deve dire <= a x
    Immaginavo qualcosa di simile. L'esempio era basico ma nulla cambia. Devi comporre la stringa che ti serve a priori in una variabile. Suppongo che questi valori da passare derivino da un form. Non puoi certamente farlo in una query. Prima viene risolto il nome della tabella poi il contenuto del where e solo ora vengono analizzati i campi.

    Da dove arrivano questi dati che devi cercare nel db?

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

  8. #8
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    Originariamente inviato da piero.mac
    Immaginavo qualcosa di simile. L'esempio era basico ma nulla cambia. Devi comporre la stringa che ti serve a priori in una variabile. Suppongo che questi valori da passare derivino da un form. Non puoi certamente farlo in una query. Prima viene risolto il nome della tabella poi il contenuto del where e solo ora vengono analizzati i campi.

    Da dove arrivano questi dati che devi cercare nel db?
    allora si io devo selezionare in un form la data di arrivo e la data di partenza, con una funzione calcolo il numero delle notti ed in base alle notti devo visualizzare il prezzo giornaliero se e' una notte o 2 notti, il prezzo giornaliero o il prezzo di 2 notti se sono 2 notti, il prezzo giornaliero o il prezzo settimanale se sono 7 notti.

    il codice come sta ora e' cosi
    codice:
    if($numero_di_notti=="4"){
    $query_offerte=("SELECT id, albergo, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino, price, arrangiamento, prezzo_come, scadenza, pacchetto
                 	FROM offerte
    				WHERE '$arrivo' between valida_da AND valida_fino and '$partenza' between valida_da and valida_fino and (prezzo_come = 1 OR prezzo_come = 4)
    				ORDER by price/prezzo_come") 			 
    				or die("Impossibile eseguire la query: ". mysql_error());
    						}
    						
    if($numero_di_notti=="5"){
    $query_offerte=("SELECT id, albergo, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino, price, arrangiamento, prezzo_come, scadenza, pacchetto
                 	FROM offerte
    				WHERE '$arrivo' between valida_da AND valida_fino and '$partenza' between valida_da and valida_fino and (prezzo_come = 1 OR prezzo_come = 5)
    				ORDER by price/prezzo_come") 			 
    				or die("Impossibile eseguire la query: ". mysql_error());
    						}
    la porzione di codice in grassetto e' l'unica a cambiare, quindi non voglio rendere dinamica la query per non scrivere sempre il codice

  9. #9
    Scusa, ma se calcoli con una funzione il numero delle notti ... metti questo numero in una variabile cosa che gia' fai a quanto pare con $numero_di_notti

    Codice PHP:
    $query_offerte=("SELECT id, albergo, titolo, 
                  DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da, 
                  DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino, 
                  price, arrangiamento, prezzo_come, scadenza, pacchetto
                     FROM offerte
                    WHERE '
    $arrivo' between valida_da AND valida_fino 
            and '
    $partenza' between valida_da and valida_fino 
            and (prezzo_come = 1 OR prezzo_come = 
    $numero_notti)
                    ORDER by price/prezzo_come"
    )              
                    or die(
    "Impossibile eseguire la query: "mysql_error());
                            } 
    Se ti servisse ordinare per data dovresti cambiare il nome dell'alias altrimenti come gg-mm-aaaa non potresti ordinarle correttamente.

    Credo poi tu volessi dire "rendere dinamica la query"

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

  10. #10
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    Originariamente inviato da piero.mac
    Scusa, ma se calcoli con una funzione il numero delle notti ... metti questo numero in una variabile cosa che gia' fai a quanto pare con $numero_di_notti

    Codice PHP:
    $query_offerte=("SELECT id, albergo, titolo, 
                  DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da, 
                  DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino, 
                  price, arrangiamento, prezzo_come, scadenza, pacchetto
                     FROM offerte
                    WHERE '
    $arrivo' between valida_da AND valida_fino 
            and '
    $partenza' between valida_da and valida_fino 
            and (prezzo_come = 1 OR prezzo_come = 
    $numero_notti)
                    ORDER by price/prezzo_come"
    )              
                    or die(
    "Impossibile eseguire la query: "mysql_error());
                            } 
    Se ti servisse ordinare per data dovresti cambiare il nome dell'alias altrimenti come gg-mm-aaaa non potresti ordinarle correttamente.

    Credo poi tu volessi dire "rendere dinamica la query"
    si ma io devo dire che se le notti sono 2
    la query deve avere nel where
    Codice PHP:
     and (prezzo_come OR prezzo_come 2
    Cmq credo di esserci riuscito mettendo where 1, tipo

    Codice PHP:
    $query_offerte="SELECT id, albergo, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino, price, arrangiamento, prezzo_come, scadenza, pacchetto FROM offerte WHERE 1";

    if (
    $numero_di_notti == "2") {
        
    $query_offerte .= " AND '$arrivo' between valida_da AND valida_fino and '$partenza' between valida_da and valida_fino and prezzo_come <= $numero_di_notti ORDER by price/prezzo_come";
    }
    if (
    $numero_di_notti == "3") {
        
    $query_offerte .= " AND '$arrivo' between valida_da AND valida_fino and '$partenza' between valida_da and valida_fino and (prezzo_come = 1 OR prezzo_come = 3) ORDER by price/prezzo_come";

    Il problema e' che la funzione che utilizzo non conta bene le notti, per questo sto perdendo un sacco di tempo, perche' dal 24 al 27 marzo mi conta 2 notti invece che 3, mentre se lo faccio per aprile mi da il risultato corretto... boh

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.