vedi che tra interval e day non mette il valore, quel prezzo_come o come si chiama la variabile. ricontrollacodice:date_add(valida_da,interval day)) = 2 )
vedi che tra interval e day non mette il valore, quel prezzo_come o come si chiama la variabile. ricontrollacodice:date_add(valida_da,interval day)) = 2 )
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
tu hai messo $period, io c'ho messo $prezzo_come, ma anche se ci metto direttamente il numero 7 mi da lo stesso errore.
Anche se ci metto $durata.
Non ho capito che ci devo mettere e cosa indica sta query
ho modificato qualcosina, questa e' la query attuale con il relativo risultato ed errore:
Se cerco per il mese di febbraio un soggiorno da 6 a 9 notti questo e' il risultato di quella query:Codice PHP:
$query_offerte="SELECT id_offerta, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da_ita, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino_ita, minimo_notti, prezzo, prezzo_come, trattamento, id_albergo, mezzo_di_trasporto FROM tbl_offerte where
( month(valida_da)=$mese and month(valida_fino)=$mese and datediff(valida_fino,valida_da)>=$durata )
or
( month(valida_da)=$mese and month((date_add(valida_da,interval $durata day)) = $mese )
or
( month(valida_fino)=$mese and month((date_sub(valida_fino,interval $durata day))=$mese)";
//se l'utente ha inserito anche la durate applichiamo il filtro
if($durata=="2"){
$query_offerte .= " AND prezzo_come<=5 ";
}
if($durata=="3"){
$query_offerte .= " AND prezzo_come>=6 AND prezzo_come<=9 ";
}
if($durata=="4"){
$query_offerte .= " AND prezzo_come>9 ";
}
$query_offerte .= "ORDER by prezzo/prezzo_come";
echo"$query_offerte
";
SELECT id_offerta, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da_ita, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino_ita, minimo_notti, prezzo, prezzo_come, trattamento, id_albergo, mezzo_di_trasporto FROM tbl_offerte where ( month(valida_da)=2 and month(valida_fino)=2 and datediff(valida_fino,valida_da)>=3 ) or ( month(valida_da)=2 and month((date_add(valida_da,interval 3 day)) = 2 ) or ( month(valida_fino)=2 and month((date_sub(valida_fino,interval 3 day))=2) AND prezzo_come>=6 AND prezzo_come<=9 ORDER by prezzo/prezzo_come
l'errore che esce sotto e'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER by prezzo/prezzo_come' at line 7
ma non capisco perche'
niente, mi sono arenato su questo pezzo di codice tuo...![]()
se mi dai tempo mi installo mysql e ti faccio un esempio pratico, però ora sono impegnato :POriginariamente inviato da allin81
niente, mi sono arenato su questo pezzo di codice tuo...![]()
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
si si ok, no problem
ma intanto mi dici quel pezzo di query cosa dovrebbe fare?
allora
solo che così $durata = 1/2/3/4 (ovvero le opzioni del form) e non ritorna quindi il dato sperato... la query praticamente dice:codice:$query_offerte="SELECT id_offerta, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da_ita, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino_ita, minimo_notti, prezzo, prezzo_come, trattamento, id_albergo, mezzo_di_trasporto FROM tbl_offerte where 1=1 and ( ( month(valida_da)=$mese and month(valida_fino)=$mese and datediff(valida_fino,valida_da)>=$durata ) or ( month(valida_da)=$mese and month((date_add(valida_da,interval $durata day)) = $mese ) or ( month(valida_fino)=$mese and month((date_sub(valida_fino,interval $durata day))=$mese))"; //se l'utente ha inserito anche la durate applichiamo il filtro if($durata=="2"){ $query_offerte .= " AND prezzo_come<=5 "; } if($durata=="3"){ $query_offerte .= " AND prezzo_come>=6 AND prezzo_come<=9 "; } if($durata=="4"){ $query_offerte .= " AND prezzo_come>9 "; } $query_offerte .= "ORDER by prezzo/prezzo_come"; echo"$query_offerte ";
seleziona tutto dalla tabella tbl_offere dove
uno è uguale a uno (e vabbeh è un collante) E
caso 1) valida_da e valida_fino sono del mese ricercato e la durata dell'offerta (=valida_fino - valida_da) in giorni è maggiore o uguale della durata richiesta ($durata)
oppure
caso 2) valida_da è del mese ricercato e valida_fino di un altro mese, e valida_da + il numero di giorni di soggiorno richiesto ricade sempre nel mese richiesto (tipo inizia il 15 marzo finisce ad aprile, quindi se cerco 5 giorni a marzo allora "15 marzo" è di marzo e "15 marzo + 5giorni" è sempre di marzo e quindi la seleziono)
oppure caso 3)
valida_fino è del mese ricercato e valida_da di un altro mese, e valida_fino MENO il numero di giorni ricercato ricade sempre nel mese richiesto ( offerta che iniza dal 15 marzo e finisce il 6 aprile, se cerco 5 giorni ad aprile allora "6 aprile meno 5 giorni" resta sempre in aprile e quindi visualizzo l'offerta)
il problema qui è quel tuo prezzo_come che non ho capito a cosa serva
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
ok ho capito la tua query, ora la provo.
Il prezzo_come serve ad indicare l'offerta per quante notti e', ad esempio
- se c'e' 1, e' per una notte
- se c'e' 2, e' per 2 notti,
-7 per 7 notti, ecc ecc
In pratica io metto l'offerta dal 10 aprile al 24 maggio e in prezzo_come metto 7, il che significa che per tutto quel periodo, chi prenota un soggiorno di 7 notti paga quel prezzo, credo che devo metterlo per forza, no?
niente, ho provato con la tua query e questo e' il risultato:
SELECT id_offerta, titolo, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da_ita, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino_ita, minimo_notti, prezzo, prezzo_come, trattamento, id_albergo, mezzo_di_trasporto FROM tbl_offerte where 1=1 and ( ( month(valida_da)=2 and month(valida_fino)=2 and datediff(valida_fino,valida_da)>=3 ) or ( month(valida_da)=2 and month((date_add(valida_da,interval 3 day)) = 2 ) or ( month(valida_fino)=2 and month((date_sub(valida_fino,interval 3 day))=2)) AND prezzo_come>=6 AND prezzo_come<=9 ORDER by prezzo/prezzo_come
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER by prezzo/prezzo_come' at line 8
ci sta quel where 1=1 che ho provato ad eliminare ma lo stesso non va...