Problemi di calcolo tra due date

Non hai formattato le date come ti avevo detto,non hai tolto le parentesi tonde dal between e il GROUP BY non capisco a cosa ti serve
 
per calcolare la differenza tra le due date puoi fare cosi
PHP:
$dataarrivo = "2014-05-05";
$date_end = "2014-05-08";

$dal = new DateTime($dataarrivo);
$al = new DateTime($date_end);
$intervallo = $dal->diff($al);

$giorni = $intervallo->d;

$query = "SELECT idhotel, room, price, ($giorni * price) as total
                          FROM rooms 
                          WHERE '$dataarrivo' BETWEEN data_start AND data_end";
ma devi avere la versione di php maggiore o pari alla 5.3.0

Quando fai l'echo della query deve restituirti questo
Codice:
SELECT idhotel, room, price, (3 * price) as total FROM rooms WHERE '2014-05-05' BETWEEN data_start AND data_end
 
Ciao criric, ti ringraio di cuore x l'impegno che ci stai mettendo!!! :) allora ho fatto come mi hai suggerito ed e' la query mi stampa questo:
Codice:
SELECT idhotel, room, price, (3 * price) as total FROM rooms WHERE '2014-05-05' BETWEEN data_start AND data_end
ed e' effettivamente come dici tu poi ho scritto per stampare il prezzo:
PHP:
			$result=mysql_query($query);
			$prezzo=mysql_fetch_array($query);
			while($row=mysql_fetch_array($result)){
		        echo $prezzo['total'];				
			}
ma non mi calcola il prezzo dei giorni.
Grazie
 
Ultima modifica:
ho risolto il problema adesso la query funziona, ho cosi' cambiato:
PHP:
$from = $_GET['from'];
            $to = $_GET['to'];
            $hotel_id = $_GET['hid'];
			


$dal = new DateTime($from);
$al = new DateTime($to);
$intervallo = $al->diff($dal);

$giorni = $intervallo->d;

$query="SELECT hotel_id, room_type, default_price, ($giorni * default_price) as total
                          FROM rooms 
                          WHERE '$from' BETWEEN '$from' AND '$to'
GROUP BY 
    hotel_id, room_type";
adesso pero' ho un'altro problema, nella tabella rooms, ho messo dal 10 al 20 50,00 euro e dal 21 al 30 100 euro se effettuo una ricerca dal 23 al 28 maggio (5 giorni) invece di uscire 500 euro mi da 1250, sinceramente non ho capito che calcolo fa
 
allora Criric fortunatamente sei gentile ad aiutarmi e scusami se insisto ma vorrei risolvere il problema, ho corretto il tutto (che casino che sto combinando :) ) la query funziona ma non mi da il giusto risultato
PHP:
    $from = $_POST['from'];
            $to = $_POST['to'];
            $hotel_id = $_POST['hid'];
			

$dal = new DateTime($from);
$al = new DateTime($to);
$intervallo = $al->diff($dal);

$giorni = 1;

$query="SELECT hotel_id, room_type, default_price, ($giorni * default_price) as total
                          FROM rooms 
                          WHERE '$from' BETWEEN '$from' AND '$to'
GROUP BY 
    hotel_id, room_type";
		   
			$result=mysql_query($query);
			
			while($row=mysql_fetch_array($result)){
				$ratestable[$row['room_type']][0]=$row['total'];
e questa e' la tabella rooms:
+---------+------+-------+-------+----+--------------+--------------
| hote_id | room_type | default_price | data_start |data_end |
+---------+------+-------+-------------+--------------+--------------
| 1 | Twin | 50 | 2014-05-10 | 2014-05-20
| 1 | Twin | 100 | 2014-05-20 | 2014-05-10
+---------+------+-------+-------+----+--------------+--------------

facendo una ricerca ad es. dal 12 al 13 la query come sopra l'ho scritta mi dcosi' come risultato 50 invece se tolgo
PHP:
GROUP BY 
    hotel_id, room_type
mi da come risultato 100 cioe o mi calcola il prezzo solo sulla prima rigo o solo sulla seconda. mi sapresti dire come risolvere?
Grazie
 
questa riga non è corretta
PHP:
WHERE '$from' BETWEEN '$from' AND '$to'
devi propio mettere i nomi dei campi
PHP:
WHERE '$from' BETWEEN data_start AND data_end

Nel secondo record che hai postato qualcosa non mi torna,
| 1 | Twin | 100 | 2014-05-20 | 2014-05-10
la data end è minore della data start?
 
Ho corretto l'inserimento nella tabella camere ed ho cambiato la query come mi hai suggerito ma non capisco perchè mi esce sempre come risultato 0 ho provato anche in questo modo:
PHP:
WHERE data_start <= DATE(".$from.") AND data_end >= DATE(".$to.")
ma il risultato nn è cambiato, sempre zero!!
 
Fai questa prova:
crea un file php di test nuovo e incollaci questo codice
PHP:
<?php

$sql = new mysqli("localhost", "root", "", "database");

$dataarrivo = "2014-05-15";
$date_end = "2014-05-18";
$hotel_id = 1;

$dal = new DateTime($dataarrivo);
$al = new DateTime($date_end);
$intervallo = $dal->diff($al);

$giorni = $intervallo->d;

$query = "SELECT idhotel, room, price, ($giorni * price) as total
                          FROM rooms 
                          WHERE '$dataarrivo' BETWEEN data_start AND data_end  &&
                                id = $hotel_id";
echo $query . "<br/>";
$result = $sql->query($query);
if ($result) {
    $row = $result->fetch_assoc();
    echo $result->num_rows . " Prezzo camera " . $row['total'] . " &euro;<br/>";
} else {
    echo "Errore query : " . $query . "<br/>" . $sql->error;
}
?>
posta quello che ti stampa
 
Ultima modifica:
Ciao Criric ho fatto come mi hai detto questo e' il messaggio della query:
Codice:
SELECT idhotel, room, price, (3 * price) as total FROM rooms WHERE '2014-05-15' BETWEEN data_start AND data_end && id = 1
Errore query : SELECT idhotel, room, price, (3 * price) as total FROM rooms WHERE '2014-05-15' BETWEEN data_start AND data_end && id = 1

ti posto anche una foto della tabella rooms giusto per
Schermata 2014-05-11 a 21.32.45.png

e riposto anche la tabella magari e' settata male
Codice:
CREATE TABLE `rooms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `idhotel` int(11) DEFAULT NULL,
  `room` varchar(11) DEFAULT NULL,
  `data_start` date DEFAULT NULL,
  `data_end` date DEFAULT NULL,
  `price` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  ;
grazie
 
Ultima modifica:
ho dimenticato di dirti che qui devi inserire i tuoi parametri di connessione
PHP:
$sql = new mysqli("localhost", "root", "", "database");
in piu nella query avevo sbagliato a scrivere l'idhotel
PHP:
 <?php

$sql = new mysqli("tuo host", "tuo user", "tua password", "tuo database");

$dataarrivo = "2014-05-15";
$date_end = "2014-05-18";
$hotel_id = 1;

$dal = new DateTime($dataarrivo);
$al = new DateTime($date_end);
$intervallo = $dal->diff($al);

$giorni = $intervallo->d;

$query = "SELECT idhotel, room, price, ($giorni * price) as total
                          FROM rooms 
                          WHERE '$dataarrivo' BETWEEN data_start AND data_end  &&
                                idhotel = $hotel_id";
echo $query . "<br/>";
$result = $sql->query($query);
if ($result) {
    $row = $result->fetch_assoc();
    echo $result->num_rows . " Prezzo camera " . $row['total'] . " &euro;<br/>";
} else {
    echo "Errore query : " . $query . "<br/>" . $sql->error;
}
?>
deve funzionare
 
ops!! scusa avevo dimenticato d'inserire le mie credenziali!!! ecco cosa esce :
Codice:
SELECT idhotel, room, price, (3 * price) as total FROM rooms WHERE '2014-05-15' BETWEEN data_start AND data_end && idhotel = 1
1 Prezzo camera 150 €
funzione alla grande adesso pero' vorrei capire perche' non mi funziona nella pagina del mio script
 
Con molta calma e pazienza rileggiti tutto ciò che hai scritto
al massimo riposta lo script intero modificato
 
Ciao Criric,
ho notato che se aggiungo piu' camere allo stesso hotel con le stesse date mi fa una somma totale, ad esempio, ho una camera doppia dal 15 al 20 maggio a 50 euro ed una camea tripla dal 15 al 20 maggio a 100 euro.
se faccio una ricerca dal 16 al 17 maggio una notte mi da come risultato 150 euro cioe' la somma delle due camere invece di due risultati separati.
Grazie
 
Il valore lo inserisci nel campo room ?
Le scelta ti arriva sempre dal form in post?
dovra aggiugnere una condizione alla query
PHP:
$tipocamera = $_POST["tipocamera"];

$query = "SELECT idhotel, room, price, ($giorni * price) as total
                          FROM rooms 
                          WHERE '$dataarrivo' BETWEEN data_start AND data_end  &&
                                idhotel = $hotel_id && room = '$tipocamera'";
 
strano ma mi da come risultato 0
Codice:
SELECT idhotel, room, price, (2 * price) as total FROM rooms WHERE '2014-05-15' BETWEEN data_start AND data_end && idhotel = 2 && room = ''
0 Prezzo camera €
sembra che non associa la camera al prezzo
 
mi di questo problema
Codice:
Notice: Undefined index: room in\index.php on line 8
SELECT idhotel, room, price, (2 * price) as total FROM rooms WHERE '2014-05-15' BETWEEN data_start AND data_end && idhotel = 2 && room = ''
0 Prezzo camera €

PHP:
$tipocamera = $_POST["room"];
il problema sta nel tipologia di camera che non la trova
 

Discussioni simili