Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716

    [logica SQL] verifica stanze libere

    ciao!
    io ho due tabelle (semplificate):
    tab stanze
    |id|numero|nome|numPosti|
    tab prenotazioni
    |id|idStanza|inizio|fine|

    non riesco molto bene a capire la logica con cui estrapolo le stanza libere in un determinato periodo...
    con una left join sono arrivato fino a

    "SELECT stanze.id, stanze.numero, stanze.nome, stanze_who.numPosti FROM stanze LEFT JOIN prenotazioni ON (stanze.id = prenotazioni.idStanza) WHERE "


    ecco, nel where devo dirgli 'WHERE [non ci sono prenotazioni nel periodo $inizioVerifice e $fineVerifica]"

    pensandoci bene forse forse anche la left join non mi serve a un cappero...

    ragazzi come cavolo riesco a estrapolare le stanze libere?!?

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  2. #2
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    andando a tastoni, ho provato con
    "SELECT stanze.id, stanze.numero, stanze.nome, stanze.numPosti FROM stanze LEFT JOIN prenotazioni ON (stanze.id = prenotazioni.idStanza) WHERE ( (prenotazioni.inizio BETWEEN '$inizio' AND '$fine') OR ( prenotazioni.fine BETWEEN '$inizio' AND '$fine') OR (prenotazioni.inizio < '$inizio' AND prenotazioni.fine > '$fine') )"

    che dovrebbe trovarmi tutte le stanze prenotate nel periodo $inizio $fine...
    e funziona.
    solo che a me serve il contrario, ecco.
    sperandoci più che credendoci ho provato con [...]WHERE ( !(prenotazioni.inizio [...]
    help
    considerate che se una stanza è libera, può darsi che nella tabella prenotazioni non ci sia neanche una riga con stanze.id = prenotazioni.idStanza... quindi la left join mi sega le gambe in partenza...giusto?

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  3. #3
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    prova cosi:

    Codice PHP:
    SELECT *
    FROM stanze
    WHERE stanze
    .id_stanza NOT
    IN 
    (

    SELECT prenotazioni.id_stanza
    FROM prenotazioni
    WHERE prenotazioni
    .inizio
    BETWEEN 
    '$inizio'
    AND '$fine'
    OR prenotazioni.fine
    BETWEEN 
    '$inizio'
    AND '$fine'
    OR prenotazioni.inizio '$inizio'
    AND prenotazioni.fine '$fine'

    fammi sapere
    alcool: la causa e la soluzione di tutti i problemi

  4. #4
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    Originariamente inviato da Gumble
    prova cosi:

    Codice PHP:
    SELECT *
    FROM stanze
    WHERE stanze
    .id_stanza NOT
    IN 
    (

    SELECT prenotazioni.id_stanza
    FROM prenotazioni
    WHERE prenotazioni
    .inizio
    BETWEEN 
    '$inizio'
    AND '$fine'
    OR prenotazioni.fine
    BETWEEN 
    '$inizio'
    AND '$fine'
    OR prenotazioni.inizio '$inizio'
    AND prenotazioni.fine '$fine'

    fammi sapere
    ottimo funziona!!!
    grazie

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da thitan
    ottimo funziona!!!
    Probabilmente sì ma la logica è inutilmente complicata

    http://database.html.it/guide/lezion...ioni-alberghi/

  6. #6
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    Originariamente inviato da luca200
    Probabilmente sì ma la logica è inutilmente complicata

    http://database.html.it/guide/lezion...ioni-alberghi/
    hai assolutamente ragione.. io ho solo seguito la sua logica (di trovare prima le camere occupate e poi escluderle)! a pensarci bene é molto meglio trovare subito le camere libere!

    consiglio quindi di dare un'occhiata al link dato da luca200
    alcool: la causa e la soluzione di tutti i problemi

  7. #7
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    Originariamente inviato da luca200
    Probabilmente sì ma la logica è inutilmente complicata

    http://database.html.it/guide/lezion...ioni-alberghi/
    nella lezione c'è scrito di fare così
    Codice PHP:
    SELECT FROM camere c WHERE NOT EXISTS
    (SELECT FROM prenotazioni p WHERE p.camera c.numero
    AND (p.periodoDal <= '2006-07-15'
         
    AND p.periodoAl '2006-07-15' )); 
    ...ma è la stessa idendica cosa suggerita da gumble mi pare

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  8. #8
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    ok! sono io che per fare le cose in fretta dico ca**ate!

    mi sa che il NOT sia d'obbligo (ma anche qui non ne sono sicuro)... avevo visto male la query mi sa!

    di sicuro la semplificazione sta nel togliere tutti i "nostri" between...

    e cmq forse é meglio che leggo meglio la prox volta. chiedo venia
    alcool: la causa e la soluzione di tutti i problemi

  9. #9
    Utente di HTML.it L'avatar di thitan
    Registrato dal
    Feb 2001
    Messaggi
    716
    Originariamente inviato da Gumble
    ok! sono io che per fare le cose in fretta dico ca**ate!

    mi sa che il NOT sia d'obbligo (ma anche qui non ne sono sicuro)... avevo visto male la query mi sa!

    di sicuro la semplificazione sta nel togliere tutti i "nostri" between...

    e cmq forse é meglio che leggo meglio la prox volta. chiedo venia
    bhè l'esempio considera un giorno solo, invece io devo considerare N giorni quindi i between sono d'obbligo, mi semplificano i 4 casi di collisione
    (inizio<$inizio AND fine>$inizio) OR
    (inizio<$inizio AND fine>$fine) OR
    (inizio>$inizio AND fine>$fine) OR
    (inizio>$inizio AND inizio<$fine)

    www.inter-rail.it
    travellers, not tourist
    Is cuma cá mhinice a théann tú ar strae; is é is tábhachtaí gurb áil leat do bhealach a aimsiú arís.

  10. #10
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    ok! non ho controllato quello che dici.. ma prometto che non risponderò mai piu di fretta! eheh.. che figure...
    alcool: la causa e la soluzione di tutti i problemi

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.