- Home
- Categorie
- Coding e Sistemistica
- Coding
- query su minimo di notti
-
query su minimo di notti
salve
ho delle offerte che inserisco nel database che sono valide solo se ci sono tot numero di notti.
Ad esempio, il prezzo di 60 euro al giorno e' valido solo se vengono effettuati dai 3 pernottamenti in poi.Il campo si chiama proprio numero_notti
Nella query come devo indicare sta cosa?Mi spiego meglio, se effettuo la ricerca per 3 notti mi esce senza problemi il record, se invece effettuo la ricerca per 4 notti non mi esce e non capisco il motivo
La durata delle notti la prendo da una select che ho nel form ed il campo si chiama $durataPotete aiutarmi?
-
Ciao,
puoi postare il codice utilizzato? Altrimenti è difficile dirti dov'è il problema.
-
questa e' una delle clausole:
[php]
elseif($durata=="3"){
$query_offerte .=" and (minimo_notti = 0 OR minimo_notti = 1 OR minimo_notti = 3)";
}
[/php]
a me sembra che sta fatta bene, anzi forse potrei correggerla indicando che minimo_notti deve essere minore o uguale a $durata (che sarebbe il campo select del modulo)
-
Ma il problema non la dava con 4 notti?
-
con tutte, le prove le stavo facendo con il 4, cmq ora ho modificato cosi':
[php]
//Se la durata è compresa tra 1 e 14 (notti) mi dice che l'offerta da tirare fuori deve essere inferiore o uguale alla data di scadenza dell'offerta
if($durata!="16"){
$query_offerte .= "AND DATE_ADD(STR_TO_DATE('$arrivo', '%Y-%m-%d'), INTERVAL +$durata DAY) <= valida_fino ";
}// Se la durata è uguale a 16 significa che vuole vedere tutte le offerte e quindi non ci sono filtri da applicare
elseif($durata=="16"){
$query_offerte .= "";
}//Se la durata è diversa sia da 14 notti che da tutte le offerte (16) significa che deve mostrare tutte le offerte che hanno come minimo di notti un valore minore o uguale alla data scelta
elseif(($durata!="14")and($durata!="16"))
{
$query_offerte .=" and (minimo_notti <= $durata)";
}
[/php]
Per logica dovrebbe essere corretto cosi, no?
-
No perchè al terzo if non ci arrivi mai, viene sempre soddisfatta una delle condizioni precedenti.
-
e quindi devo mettere il terzo al primo posto?
-
Si, se lo metti sopra funziona come vuoi tu.
-
sicuro che non va in conflitto con gli altri 2?
-
Il problema è cosa stai facendo più che altro, perchè hai 2 if che agiscono sul numero di notti mentre l'altra condizione utilizza un campo totalmente diverso.
-
in che senso? tutti e 3 gli if tengono conto della durata.
Spiego meglio:
Ho un form composto dal campo "arrivo" dove inserisco la data tipo gg-mm-aaaa e sotto ho il campo "durata" dove ho questi valori1 notte (value 1)
2 notti (value 2)
3 notti (value 3)
4 notti (value 4)
5 notti (value 5)
6 notti (value 6)
7 notti (value 7)
14 notti (value 14)
tutte le offerte (value 16)quindi:
- se l'utente sceglie il valore 16, non ci saranno filtri e mostrerà tutti i prezzi
- se l'utente sceglie un valore diverso da 14 o da 16 vedrà tutti i prezzi, anche quelli che hanno un minimo di notti impostato, per esempio se l'offerta ha un minimo di notti pari a 3 e l'utente cerca un'offerta per 4 notti, questa offerta dovrà uscire
- se l'utente cerca per 14 notti (questo ancora sto cercando di gestirlo) e magari in 14 notti sono comprese tue offerte settimanali come ad esempio una dal 2 al 9 agosto e l'altra dal 9 al 16 agosto, allora dovra' tirarmi fuori la somma delle 2 offerte...
-
credo che cosi sia ancora migliore, facendo solo 2 condizioni
[php]
//Se la durata è compresa tra 1 e 14 (notti) mi dice che l'offerta da tirare fuori deve essere inferiore o uguale alla data di scadenza dell'offerta con il minimo di notti impostato
if($durata!="16"){
$query_offerte .= " and (minimo_notti <= $durata) AND DATE_ADD(STR_TO_DATE('$arrivo', '%Y-%m-%d'), INTERVAL +$durata DAY) <= valida_fino ";
}// Se la durata è uguale a 16 significa che vuole vedere tutte le offerte e quindi non ci sono filtri da applicare
elseif($durata=="16"){
$query_offerte .= "";
}
[/php]
ora dovrei lavorare sulla 14 notti...