Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 23250|Risposta: 11

[Nuovo numero] Come scegliere le camere più economiche

[Copiato link]
Pubblicato su 05/12/2018 21:32:38 | | | |
Ora ci sono due tavoli da usare, room_type e room_info
Ci sono 3 hotel con documenti 1~3. Poi ogni hotel ha 3 tipi di camere, con ID rispettivamente di 1~9.
Il room_type contiene il nome, l'ID e il corrispondente ID dell'hotel di ogni tipo di stanza
Ciò che viene conservato nel room_info è il prezzo di ogni giorno, ogni tipo di stanza e il numero di stanze rimanenti.
Gli argomenti che vorrei porre sono:
Specifica l'intervallo di tempo e il numero di camere da prenotare, consulta gli hotel, le opzioni di tipo di camere e i prezzi medi che soddisfano le condizioni (ora, numero di camere rimanenti) e ordinali per prezzo medio dal più basso al più alto. I risultati includono hotel, combinazioni e quantità selezionate di camere, e il prezzo medio più basso.
##不要求为同一房型, ma deve essere lo stesso hotel, e puoi cambiare il tipo di stanza a metà.
##比如, l'orario di check-in è il 2018-11-14~2018-11-15, e il numero di camere prenotate è 5
##返回选择酒店A, 11-14 selezionano 4 tipi di stanza con ID 3, 1 tipo di stanza con ID 2, 11-15 selezionano 3 tipi di stanza con ID 3, 2 tipi di stanza con ID 2, e il prezzo più basso è 2000
##老师要求只能用sql语句, l'implementazione MySQL non può usare Python, C++, ecc.
Non l'ho scritto per un giorno, e non ho visto un argomento simile su Internet, quindi sono venuto a chiedere aiuto agli dei, e voglio chiederti come ottenerlo, grazie~







Precedente:Condivisione di esperienze auto-riportate da parte di ape del programma PHP
Prossimo:Politica dell'esame di ammissione post-laurea 2019 Materiali per lo sprint di Xu Tao e Xiao Xiurong
Pubblicato su 06/12/2018 17:00:58 |
Questo post è stato modificato l'ultima volta da Miaolinsen il 6-12-2018 alle 17:03

Non l'ho fatto con mysql, l'ho fatto con mssql:


/*
Specifica l'intervallo di tempo e il numero di camere da prenotare, consulta gli hotel, le opzioni di tipo di camere e i prezzi medi che soddisfano le condizioni (ora, numero di camere rimanenti) e ordinali per prezzo medio dal più basso al più alto. I risultati includono hotel, combinazioni e quantità selezionate di camere, e il prezzo medio più basso.
##不要求为同一房型, ma deve essere lo stesso hotel, e puoi cambiare il tipo di stanza a metà. -- Analisi sintica: significa che non è necessario considerare il tipo di stanza, si considera solo il numero di stanze
##比如, seleziona l'orario di check-in 2018-11-14~2018-11-15, e il numero di camere prenotate è 5 -- Analisi: L'hotel deve essere nell'intervallo di date e c'è domanda per il numero di camere ogni giorno (se non ce n'è nessuno in un determinato giorno, non soddisferà lo standard)
##返回选择酒店A, 11-14 selezionano 4 tipi di stanza con ID 3, 1 tipo di stanza con ID 2, 11-15 selezionano 3 tipi di stanza con ID 3, 2 tipi di stanza con ID 2, e il prezzo più basso è 2000 -- Analisi: Calcola il prezzo medio in base alla configurazione minima al giorno
##老师要求只能用sql语句, implementazione mysql, non può usare python, c++, ecc. */


-- Parametri in ingresso intervallo di date, numero di stanze richieste
DICHIARARE @sdate DATA = '2018-11-14';
DICHIARARE @edate DATA = '2018-11-15';
DICHIARARE @roomnum INT = 5;


-- Calcolare il numero di giorni di soggiorno
DICHIARARE @days INT;
SET @days = DATEDIFF(DAY, @sdate, @edate)+1;

-- Numero dell'hotel che corrisponde all'intervallo di date, numero di camere
IF EXISTS(select * da tempdb.dbo.sysobjects dove id = object_id(N'tempdb.. ##temp_hotel') e tipo='U')
INIZIO
    Tabella di caduta ##temp_hotel
FINE

SELEZIONA ta.hotel_id in ##temp_hotel DA
(SELECT ri. [data], rt.hotel_id, SUM(ri.remain) room_num DA room_info ri JOIN SINISTRA room_type rt su ri.room_id=rt.room_id dove @sdate <= [data] e [data] <= @edate GRUPPO PER ri. [data],rt.hotel_id AVERE SOMMA (rimane) >= 5) ta
RAGGRUPPARE PER ta.hotel_id AVERE COUNT(*) = @days



-- Calcolato in base all'hotel (configura il tipo minimo di stanza al giorno)

IF EXISTS(select * da tempdb.dbo.sysobjects dove id = object_id(N'tempdb.. ##temp_result') e tipo='U')
INIZIO
    Tabella di caduta ##temp_result
FINE
-- Tabella Provvisoria dei Risultati Hotel Appuntamento Tipo Stanza ID Nome Stanza Nome Numero di Camere Prezzo della Stanza Hotel Giornaliero Totale Hotel Prezzo medio giornaliero Hotel Prezzo totale hotel Prezzo medio giornaliero Prezzo totale giornaliero dell'hotel Prezzo totale giornaliero della stanza
CREA TABELLA ##temp_result(
    hotel_id INT,
    hotel_name varchar (255),
    [data] DATA,
    room_id INT,
    room_name VARCHAR (255),
    room_num INT,
    Prezzo della stanza DECIMALE,
    dsumprice DECIMAL,
    davgprice DECIMAL,
    DECIMALE sumprico,
    DECIMALE sumavgpric
)

DICHIARARE @hid INT; -- ID dell'hotel
DICHIARARE @infoid INT; -- info id
--affermare che il cursore è una collezione
DICHIARA my_cursor cursore per (SELEZIONA hotel_id da ##temp_hotel);
--Cursore aperto--
Aperto my_cursor
--Variabili cursore del ciclo di avvio--
Riporta il prossimo da my_cursor in @hid
mentre @@FETCH_STATUS = 0 -- restituisce lo stato dell'ultimo cursore eseguito dall'istruzione FETCH --
INIZIO      
    -- In base all'ID dell'hotel, la data ricorrente è fissata
    IF EXISTS(select * da tempdb.dbo.sysobjects dove id = object_id(N'tempdb.. ##temp_room') e tipo='U')
    INIZIO
        Tabella di caduta ##temp_room
    FINE

    -- Hotel, per data, con camere ordinate per data Tariffa
    SELEZIONA info_id, [data], price, remain, room_id IN ##temp_room DA dbo.room_info DOVE @sdate <= [data] e [data] <= @edate E RIMANERE > 0 E room_id IN (SELEZIONA rt.room_id DA dbo.room_type rt DOVE rt.hotel_id=@hid) ORDINE PER [data] ASC, prezzo ASC
   
   
    DICHIARA @thisrdate DATA = NULLO; -- Data
    DICHIARA @thisrnum INT=0; -- Numero di stanze selezionate nella data attuale
   
    DICHIARA @rdate DATA = NULLO; -- Data
    DICHIARARE @rmnum INT = 0; -- Numero di stanze per tipo di stanza
   
    -- Cicla per data
    DICHIARARE @my_cursor2 CURSORE;
    imposta @my_cursor2 = CURSORE PER SELEZIONARE info_id DA ##temp_room ORDINE PER [data] ASC, prezzo ASC
    OPEN @my_cursor2;
    PRENDI IL PROSSIMO DA @my_cursor2 IN @infoid
    MENTRE(@@FETCH_STATUS=0)
    INIZIO
        --##temp_result
        SELEZIONA @rmnum=rimane, @rdate=[data] DA ##temp_room DOVE info_id=@infoid
        SE (@thisrdate È NULLO O @thisrdate != @rdate)
        INIZIO
            STAMPA @rdate
            SET @thisrdate = @rdate;
            SET @thisrnum = 0;
        FINE
        -- Tipo di stanza per la selezione della forma dosologica
        SE(@thisrnum <= @roomnum)
        INIZIO
            SE (@thisrnum + @rmnum > @roomnum)
            INIZIO
                -- Il numero di stanze che devi usare
                SET @rmnum = @roomnum-@thisrnum;
            FINE
        FINE
        ALTRO   
        INIZIO
            -- Non è richiesta una stanza per quella data
            SET @rmnum = 0;
        FINE
        
        SE (@rmnum > 0)
        INIZIO
            -- Aggiungere i risultati per numero specificato
            INSERIRE IN ##temp_result(hotel_id, hotel_name, [data], room_id, room_name, room_num, prezzo della stanza, dsumprice, davgprice, sumpric, sumavgpric)
            SELEZIONA @hid, '', @thisrdate, room_id, '', @rmnum, price, 0, 0, 0, 0 DA ##temp_room DOVE info_id = @infoid
            
            -- Il numero di camere ha raggiunto il prezzo medio calcolato
            SET @thisrnum = @thisrnum + @rmnum;
            SE (@thisrnum = @roomnum)
            INIZIO
                -- Prezzo totale per hotel, calcolato per date
                AGGIORNAMENTO ##temp_result IMPOSTARE dsumprice=(SELECT SUM(room_num*roomprice) DA ##temp_result tr DOVE tr.hotel_id=@hid E TR.[ data]=@thisrdate) DOVE hotel_id=@hid E [data]=@thisrdate
                -- Calcolare la tariffa media della stanza per hotel, prezzo totale per data
                AGGIORNAMENTO ##temp_result IMPOSTARE davgprice=(dsumprice/@roomnum) DOVE hotel_id=@hid E [data]=@thisrdate
            FINE
        FINE

        PRENDI IL PROSSIMO DA @my_cursor2 IN @infoid;
    FINE   
    Close @my_cursor2;  --Spegni il cursore
    Deallocate @my_cursor2;   --rilasciare il cursore

    -- Per hotel, calcola il prezzo totale dell'hotel
    AGGIORNAMENTO ##temp_result SET sumpric=(SELECT SUM(room_num*roomprice) DA ##temp_result TR DOVE tr.hotel_id=@hid) DOVE hotel_id=@hid
    -- Calcolare il prezzo medio giornaliero della stanza totale dell'hotel
    AGGIORNAMENTO ##temp_result SET sumavgpric=(sumpric/@roomnum/@days) DOVE hotel_id=@hid

    FETCH next da my_cursor a @hid - passare al cursore successivo, nessun deadloop
FINE  
Chiudi my_cursor -- Chiudi il cursore
Deallocate my_cursor - Rilascia il cursore


-- Aggiungere il nome dell'hotel e il nome del tipo di stanza alla tabella temporanea
AGGIORNAMENTO ##temp_result SET hotel_name=(SELEZIONA ht.hotel_name DA dbo.hotel ht DOVE ht.hotel_id=##temp_result.hotel_id),
room_name=(SELEZIONA rt.room_name DA dbo.room_type rt DOVE rt.room_id=##temp_result.room_id)


-- Controlla i risultati dalla tabella dei risultati
SELEZIONA * DA ##temp_result




-- Fine delle tabelle temporanee
IF EXISTS(select * da tempdb.dbo.sysobjects dove id = object_id(N'tempdb.. ##temp_hotel') e tipo='U')
INIZIO
    Tabella di caduta ##temp_hotel
FINE
IF EXISTS(select * da tempdb.dbo.sysobjects dove id = object_id(N'tempdb.. ##temp_room') e tipo='U')
INIZIO
    Tabella di caduta ##temp_room
FINE
IF EXISTS(select * da tempdb.dbo.sysobjects dove id = object_id(N'tempdb.. ##temp_result') e tipo='U')
INIZIO
    Tabella di caduta ##temp_result
FINE

Punteggio

Numero di partecipanti1MB+1 contribuire+1 Collasso ragione
Admin + 1 + 1 Entusiasta di aiutare gli altri!

Vedi tutte le valutazioni

 Padrone di casa| Pubblicato su 06/12/2018 14:11:48 |
xzxmustwin Pubblicato il 6-12-2018 alle 11:58
Ad essere onesti, la struttura di questa tabella è un po' irragionevole

Le domande dei compiti assegnate dall'insegnante del database emmmm potrebbero davvero essere irragionevoli, e non le ho viste se non le ho imparate bene...
Tuttavia, la chiave resta le idee per risolvere i problemi, vorrei chiedere ai miei amici se avete qualche suggerimento?
 Padrone di casa| Pubblicato su 06/12/2018 14:09:20 |
lzzsf pubblicato il 6-12-2018 09:07
MySQL è obsoleto, nessun client, dammi lo script per SQL Server

Scusate, non ho ancora usato SQL Server, forse perché è solo insegnamento, quindi l'insegnante ci ha chiesto di usare MySQL per farlo. Se i tuoi amici sono disposti a condividere le loro idee, grazie mille.
Pubblicato su 05/12/2018 21:57:13 |
Andrò al gruppo QQ per offrire una ricompensa di 10 yuan per vedere se qualcuno può aiutarti a rispondere no
Pubblicato su 06/12/2018 07:56:39 |
Guida
Pubblicato su 06/12/2018 09:07:08 |
MySQL è obsoleto, nessun client, dammi lo script per SQL Server

Punteggio

Numero di partecipanti1MB+1 contribuire+1 Collasso ragione
Admin + 1 + 1 Entusiasta!

Vedi tutte le valutazioni

Pubblicato su 06/12/2018 11:24:25 |
lzzsf pubblicato il 6-12-2018 09:07
MySQL è obsoleto, nessun client, dammi lo script per SQL Server

Si consiglia di parlare dell'idea e lasciare che il proprietario la usi come riferimento, cosa che dovrebbe essere possibile
Pubblicato su 06/12/2018 11:58:37 |
Ad essere onesti, la struttura di questa tabella è un po' irragionevole

Punteggio

Numero di partecipanti1MB+1 contribuire+1 Collasso ragione
Admin + 1 + 1 Entusiasta!

Vedi tutte le valutazioni

 Padrone di casa| Pubblicato su 06/12/2018 14:07:29 |
Pubblicato il 5-12-2018 alle 21:57
Andrò al gruppo QQ per offrire una ricompensa di 10 yuan per vedere se qualcuno può aiutarti a rispondere no

Grazie, se qualcuno è disposto a rispondere, vi mando la busta rossa :)
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com