Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Query periodi (hard)

  1. #1
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427

    Query periodi (hard)

    Trattasi di superquery....

    Ho questa tabella:

    dal al quantita
    19/04/2007 20/04/2007 1
    20/04/2007 27/04/2007 1
    04/05/2007 05/05/2007 1

    come vedete i periodi non sono attigui...

    vorrei sapere se tra il 20/04/2007 e il 10/06/2007 e la quantità è costantemente maggiore di zero...

    in teoria e ditemi se sbaglio, l'unico modo per capire se la quantita è > 0 in ogni giorno tra il 20/04/2007 e il 10/06/2007 è fare una query in un ciclo che controlli giorno per giorno la quantita della tabella

    ma il problema è:
    con access non è possibile fare un controllo prima di creare il recordset..
    cosa che è possibile con TSQL o Mysql 5.0.

    Il mio problema quindi, creando anche un ciclo , è solo la paginazione...
    ottengo n record ma tramite il ciclo (asp) filtro quelli che con quantità <= 0
    ma filtrando non con ado, solo in visualizzazione non ottengo page.size ...

    un aiuto please ?

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non so se questo quesito e' la prosecuzione di qualche altro... ma di certo, se preso a se' stante, non si capisce come collegare logicamente i brani "subquery", "fare un controllo prima di creare il recordset", "è solo la paginazione", "filtrando non con ado", "non ottengo page.size" per indovinare cosa chiedi...

    Una descrizione piu' organica?

    ciao

    ps: dai per scontato che con una sola query non e' possibile... il resto dipende da quello che realmente vuoi ottenere.
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    Br1 capisco ...

    in effetti non sono stato proprio chiaro...

    lo spiego a parole mie...



    la tabella l'hai vista...

    devo capire se tra il 20/04/2007 e il 20/06/2007 in quella tabella.. esistano dei periodi "attigui" che abbiamo una quantita maggiore di zero...

    esempio...

    la tabella è questa:
    19/04/2007 20/04/2007 1
    20/04/2007 27/04/2007 1
    04/05/2007 05/05/2007 1

    tra il 20 e il 21 quantità > 0
    tra il 21 e il 22 quantità > 0
    tra il 22 e il 23 quantità > 0
    così via fino al 27...
    però poi dal 27/04 al 04/05 la quantità è nulla e nel mio caso è = 0

    capito questo, il risultato della query deve essere un rec.eof

    Conta che devo controllare la disponibilità di "n" alberghi...
    senza però dovere creare un ciclo in asp per ogni albergo e che mi permetta di capire se in ogni albergo c'è un valore > 0 nel periodo richiesto.

    in teoria è facile facendo un ciclo... e facendolo ciclare sui giorni richiesti
    se durante uno step si incontra un valore = 0 si esce dal ciclo e si omette quell'albergo.
    al contrario se non si trovano valori = 0 si include l'albergo nella lista dei risultati.
    Questo è indubbiamente semplice...
    ma come faccio a paginare dato che non ho un elenco filtrato dal recordset ma filtro in base ai risultati di tutti gli alberghi (anche quelli non disponibili) omettendo solo il record tramite un artificio ?

    codice:
    set rs=conn.execute "query_tuttihotel "
    do until rs.eof
    'inizio il ciclo per  controllare dispo 
    
    for i = data1 to data2
    query
    if quantita = 0 then
    'passa al prossimo albergo ed esci da questo ciclo
    ' l'hotel non ha dispo per le date richieste
    else
    'stampa albergo
    ' continua il ciclo e se i = data2 e quantità è maggiore di zero l'hotel ha disponibilità
    next
    
    rs.movenext
    loop
    end if
    in questo modo è facile ma oltre che pesante , rende impossibile la paginazione...
    spero di esssere stato più chiaro...

    p.s.
    non ho mai trovato un post su dispo alberghiera avanzata.. almeno qui.

  4. #4
    non c'ho capito un'acca di quello che ti serve, però non potresti fare che:


    1) prendi il tuo recordset dei periodi e lo scorri per controllare la storia della quantità <=> 0

    2) ogni volta che trovi un record che ti interessa, te lo salvi dentro un recordset disconnesso di struttura identica a quello connesso

    3) impagini il recordset disconnesso (che conterrà solo i dati che ti servono)


    ?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Originariamente inviato da Santino83_02
    non c'ho capito un'acca di quello che ti serve
    .................................
    ?
    ...quoto;

    Perchè non fai un esempio (con dei dati significativi) tipo :

    Periodo di ricerca camere libere = .............

    Dati:

    IDAlbergo--Dal--Al--Quantita(di che ?, camere libere od occupate ?)
    ......................................

    Risultato desiderato
    .......................................

    Ciao

  6. #6
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    la cosa è spiegata piuttosto bene...

    e credo che santino ci sia arrrivato....

    ma non ho mai usato un record disconesso o temporaneo quindi mi servirebbe una mano se possibile.

    vediamo se ho capito

    1) apro il recordset di tutti gli alberghi
    2) apro un ciclo e una query che usa il ID_hotel per controllare se i periodi sono > 0
    3) ogni volta che trovi un record che ti interessa, te lo salvi dentro un recordset disconnesso di struttura identica a quello connesso

    Se fosse così mi manca solo lo step 3
    e il mio codice si dovrebbe solo implementare

    codice:
    'step1
    set rs=conn.execute "query_tuttihotel " 
    do until rs.eof
    'inizio il ciclo per  controllare dispo utilizzando il id_hotel
    for i = data1 to data2
    'query di controllo periodi giorno per giorno  es:
    select from periodi where dal > i and al < i
    
    
    if quantita = 0 then
    'passa al prossimo albergo ed esci da questo ciclo
    ' l'hotel non ha dispo per le date richieste
    end if
    if i = data2 and data2 > 0 then
    'memorizza in record disconnesso
    l'hotel ha disponibilità
    end if
    
    next
    
    rs.movenext
    loop
    end if
    Fate conto che il mio obiettivo è di capire se un albergo ha disponibilità o meno...
    non voglio stampare i periodi voglio solo sapere se un determinato Id_hotel per un determinato periodo ha un valore > 0 in tutti i giorni di quel periodo

  7. #7
    Originariamente inviato da agenti
    la cosa è spiegata piuttosto bene...
    ...non hai detto se, per un albergo, i periodi 'DAL' 'AL' possono avere dei giorni in comune oppure no.

    nella seconda ipotesi (ogni periodo di un albergo ha in comune con l'altro *solo* inizio e fine)
    potresti provare con una query (che temo decisamente poco performante putroppo)
    come segue;

    l'ho provata su Access 2000 con 15/01/2006 - 29/01/2006 come periodo di ricerca

    e con questi dati :

    codice:
    IDAbergo	Dal	Al	CL
    ------------------------------------------------------------------------
    1	01/01/2006	02/01/2006	1
    1	05/01/2006	06/01/2006	1
    1	06/01/2006	07/01/2006	1
    1	10/01/2006	12/01/2006	1
    1	12/01/2006	15/01/2006	1
    1	15/01/2006	20/01/2006	1
    1	20/01/2006	30/01/2006	1
    2	10/01/2006	12/01/2006	1
    2	12/01/2006	15/01/2006	1
    2	15/01/2006	20/01/2006	1
    2	20/01/2006	29/01/2006	1
    
    ho ottenuto questo risultato 
    
    TipoRec	IDAbergo	DAL	AL
    ------------------------------------------------------------------------
    N1	1	15/01/2006	30/01/2006
    N1	2	15/01/2006	29/01/2006
    N2	1	10/01/2006	30/01/2006
    N2	2	10/01/2006	29/01/2006
    la query con tipo record N2 è quella che ti torna un solo
    record nel caso di almeno 3 periodi 'Attigui';

    quella con tipo record N1 tiene conto invece
    di soli 2 periodi 'Attigui';

    ...vedi tu se può andare e, nel caso, come migliorarla;

    codice:
    SELECT QAzz.*
    FROM
    (
    
     SELECT 'N0' as TipoRec,  T1.IDAbergo, T1.DAL AS DAL, T1.AL AS AL 
     FROM Tabella2 T1
    ***EDIT qui ovviamente va aggiunto :  WHERE T1.CL>0  ********
    
     
     UNION ALL
    
     SELECT  'N1' as TipoRec , T1.IDAbergo, T1.DAL , T2.AL 
     FROM Tabella2 T1
     INNER JOIN  Tabella2 AS T2 ON   (T1.IDAbergo=T2.IDAbergo) AND  (T1.Al=T2.Dal)
     WHERE T1.CL>0 and T2.CL>0 
    
     UNION ALL
    
     SELECT 'N2' as TipoRec , Q1.IDAbergo AS IDAlbergo, MIN(Q1.T1_DAL) AS DAL, MAX(Q2.T2_AL) AS AL
     FROM 
       (SELECT  T1.IDAbergo, T1.Dal AS T1_DAL ,T1.Al as T1_AL,T2.Dal as T2_DAL, T2.Al as T2_AL
       FROM Tabella2 T1
       INNER JOIN  Tabella2 AS T2 ON   (T1.IDAbergo=T2.IDAbergo) AND  (T1.Al=T2.Dal)
       WHERE T1.CL>0 and T2.CL>0 ) AS Q1
     INNER JOIN
      (SELECT  T1.IDAbergo, T1.Dal AS T1_DAL ,T1.Al as T1_AL,T2.Dal as T2_DAL, T2.Al as T2_AL
      FROM Tabella2 T1
      INNER JOIN  Tabella2 AS T2 ON   (T1.IDAbergo=T2.IDAbergo) AND  (T1.Al=T2.Dal)
      WHERE T1.CL>0 and T2.CL>0 ) AS Q2
      ON (Q1.IDAbergo=Q2.IDAbergo) AND (Q1.T1_AL=Q2.T1_DAL) 
      GROUP BY Q1.IDAbergo
    
    ) AS QAzz
    
    WHERE DAL<=#01/15/2006# AND AL>=#01/29/2006#

  8. #8
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    grazie sspintux , ma credo di avere risolto...

    utilizzando Dataset e applicandolo nel mio caso...
    l'unico dubbio che ho è di performance....


    infatti se si chiede un check di 30 giorni di controllo ad esempio

    01/04/2007 al 30/04/2007

    è chiaro che il ciclo di verifica sarà più lungo..
    fortunatamente però questo tipo di richietsa è rara e l'applicazione che sto costruendo è per un intranet.


    cosa vuoi dire con :" ...non hai detto se, per un albergo, i periodi 'DAL' 'AL' possono avere dei giorni in comune oppure no."


    di seguito il link per il Dataset

    dataset

    grazie a chi mi ha indicato questa strada.

  9. #9
    ma è giusto il link?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    a me funziona.... :master: qual'è il problema ?

    però ho un problema su come creare la struttura del datalist non avendo trovato documentazione

    Set DataList = CreateObject("ADOR.Recordset")
    DataList.Fields.Append "nome_hotel", "200", 50
    DataList.Fields.Append "id_htl", "1", 8
    DataList.Open

    la riga che va in errore è ataList.Fields.Append "id_htl", "1", 8
    in teoria dovrebbe essere un "integer"

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 © 2026 vBulletin Solutions, Inc. All rights reserved.