Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    57

    Problema calcolo prezzo

    Ciao a tutti, ho un problema di calcolo prezzo tra diverse date, io ho la tabella "camere" composta cosi':
    codice:
    `id` int(11) NOT NULL AUTO_INCREMENT,
      `idhotel` int(11) DEFAULT NULL,
      `room` int(11) DEFAULT NULL,
      `data_start` date DEFAULT NULL,
      `data_end` date DEFAULT NULL,
      `price` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    all'interno della tabella ho inserito il prezzo per diverse date poi ho questo codice per calcolare il prezzo in base alla data scelta ad esempio dal 20/05/2014 al 30/05/2014 la camera Twin costa 50,00
    la query di ricerca è questa:
    Codice PHP:
    $result mysql_query("SELECT idhotel, room, price, (DATEDIFF(data_end, data_start) * price) as total FROM rooms"); 
    quando effettuo una ricerca ad esempio dal 21 maggio al 22 maggio (1 notte) invece di uscire 50,00 mi esce 500,00 euro che sarebbe l'addizione dei giorni dal 20 al 30 maggio. mi sapete dire dove sto sbagliando?
    Grazie
    Ultima modifica di princo; 09-05-2014 a 11:10

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    57
    Ho cambiato la query in modo da fare una ricerca piu' specifica ma niente da fare mi calcola sempre il prezzo di 500 euro
    Codice PHP:
    SELECT 
        idhotel
    roomSUM(total) as total_sum 
    FROM 
    (
        
    SELECT 
            idhotel

            
    room,
            
    price
            (
    DATEDIFF(data_enddata_start) * price) as total 
        FROM 
            rooms
    ) as 
    GROUP BY 
        idhotel
    room 
    proprio non capisco :gun:

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    57
    ho fatto alcune modifiche e la query funziona in parte diciamo, questa è 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-21 | 2014-05-30
    +---------+------+-------+-------+----+--------------+--------------

    e questo e' la modifica alla query:
    Codice 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']; 

    facendo una ricerca ad es. dal 12 al 13 la query come sopra l'ho scritta mi da come risultato 50 invece se tolgo
    Codice PHP:
      GROUP BY 
        hotel_id
    room_type 
    mi da come risultato 100 cioe o mi calcola il prezzo solo sulla prima riga o solo sulla seconda. mi sapresti dire come risolvere?
    Grazie

  4. #4
    spiega cosa vorresti ottenere (con un esempio)

  5. #5
    Quote Originariamente inviata da princo Visualizza il messaggio
    facendo una ricerca ad es. dal 12 al 13 la query come sopra l'ho scritta mi da come risultato 50 invece se tolgo
    Codice PHP:
      GROUP BY 
        hotel_id
    room_type 
    mi da come risultato 100 cioe o mi calcola il prezzo solo sulla prima riga o solo sulla seconda. mi sapresti dire come risolvere?
    Grazie
    abbastanza semplice da capire:

    WHERE '$from' BETWEEN '$from' AND '$to'

    Sara' sempre TRUE poiche' $from di sicuro sara' SEMPRE tra $from and $to

    l'altro problema e' che con group by ottieni una sola riga e, per inciso, sara' la prima che fisicamente incontra nella tabella, mentre senza il raggruppamento ne estrarra' due essendo $from sempre vero. In questo caso vai a sovrascrivere l'array avendo un indice fisso numerico [0] e quindi vedi solo l'ultimo record set trovato

    $ratestable[$row['room_type']][0]=$row['total'];

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

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.