Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Prezzo minimo

  1. #1
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494

    Prezzo minimo

    Salve a tutti,
    tramite la seguente query vorrei prelevare per ogni hotel una sola camera con il suo relativo prezzo e sconto:

    codice:
    SELECT hotels.hotel_id, hotels.hotel_name, camere.id_camera,camere.numero_camere-COALESCE(booking_check_avilability.total_room+booking_check_avilability.blocked_inventory,0) AS disponibilità,
    coalesce(hotel_prezzo_stagione.prezzo_stagione,hotel_prezzo_camera.prezzo_camera)-(coalesce(hotel_prezzo_stagione.prezzo_stagione,hotel_prezzo_camera.prezzo_camera)
    *round(coalesce(promo.promo_sconto,0)/100.0,2)) as prezzoscontatofinale,
    coalesce(hotel_prezzo_stagione.prezzo_stagione,hotel_prezzo_camera.prezzo_camera)*round(coalesce(promo.promo_sconto,0)/100.0,2) as scontoineuro,
    coalesce(hotel_prezzo_stagione.prezzo_stagione,hotel_prezzo_camera.prezzo_camera) as prezzodascontare
    
    FROM hotels
    
    LEFT JOIN hotel_prezzo_camera ON (hotel_prezzo_camera.numero_ospiti='2')
    
    LEFT JOIN hotel_prezzo_stagione ON (hotel_prezzo_camera.id_camera=hotel_prezzo_stagione.id_camera)
    AND (prezzo_dal>='2015-06-25') AND (prezzo_al<='2015-06-26') AND (hotel_prezzo_stagione.numero_ospiti='2')
    
    LEFT JOIN promo ON (hotel_prezzo_camera.id_camera=promo.id_camera)
    AND (promo_dal>='2015-06-25') AND (promo_al<='2015-06-26') AND (promo.numero_ospiti='2')
    
    LEFT JOIN booking_check_avilability
    ON (hotel_prezzo_camera.id_camera = booking_check_avilability.room_type_id)
    AND (booking_check_avilability.check_in_date >= '2015-06-25') AND (booking_check_avilability.check_out_date <= '2015-06-26')
    
    LEFT JOIN camere ON (hotel_prezzo_camera.id_camera=camere.id_camera) AND (camere.numero_ospiti >= '2')
    
    WHERE hotels.hotel_city = 'Adrano' AND hotels.hotel_id = camere.hotel_id
    AND camere.numero_camere-COALESCE(booking_check_avilability.total_room+booking_check_avilability.blocked_inventory,0) >= '1'
    In questo momento mi preleva tutte le camere, quindi mi duplica l'hotel, ho provato a raggruppare per hotel_id, gli hotel diventano 3 correttamente però le camere che seleziona le prende per ordine di camera io vorrei prendere la camera con il prezzo più basso.

    Spero di essermi spiegato bene.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Già se vuoi prendere un valore minimo ci vuole min da qualche parte. Poi le tue join mi sembrano strane. La prima non ha alcun riferimento alla tabella hotels. Poi (non sono un esperto) metti nelle clausole on delle espressioni che andrebbero nella clausola where. La clausola on dovrebbe servire solo per fare le giunture tra tabelle. In fine la tua query è troppa complicata per eseguirla mentalmente.
    Fossi in te ripartirei da 0 e andrei passo per passo. Selezionare tutte le camere e il loro prezzo e sconto di tutti gli hotel (dovresti avere soli INNER JOIN in quanto ogni hotel deve avere almeno una camera con il prezzo più basso). Fatto questo dovrebbe essere più facile prendre quelle che hanno il prezzo più basso.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Io invece, anche se non me ne intendo molto, toglierei i ' dove i valori son numerici

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.