Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di legal-x
    Registrato dal
    Nov 2000
    Messaggi
    628

    Un'altra query complessa :( ...help me !

    salve a tutti,

    ci sto sbattendo un pò la testa, ma non riesco ad arrivare ad una soluzione "ottimizzata e veloce" ...


    Ho una tabella cosi strutturata

    ID | Numero_tel |
    1 0256565665
    2 0215151212
    3 0685181818
    4 0818484848
    5 0256565665

    Come vedere l'ID 1 e ID 5 hanno lo stesso numero di telefono.

    Poi un'altra tabella:

    ID | Numero_tel | Esito
    1 0256565665 N
    2 0215151212 S
    3 0685181818 S
    4 0818484848 S
    5 0256565665 N


    La mia query dovrebbe prendere distintamente (quindi senza doppioni) tutti i numeri di telefono ...e quindi faccio SELECT DISTINCT(Numero_tel) FROM Tabella1

    Poi controllare nella tabella2 l'esito ...ovvero:

    - Se nella tabella "esiti" quel numero ha avuto esito N almeno 2 volte, allora fai delle operazioni (Via ASP, una cancellazione dalla TAB1) ...altrimenti non fa nulla.

    Questo script è solo un controllo per andare a verificare l'esistenza di numeri di telefono, e quindi se l'esito della chiamata è S ...il numero è esatto. Purtroppo nella TAB1 ho vari nominativi con lo stesso numero (non ci posso far nulla e deve essere così)...e nella tabella2 l'esito può essere S o N sullo stesso numero (per operazioni di immissione errate, o altro) ...in ogni caso a me servirebbe che l'esito si N almeno 2 volte ..per procedere alla cancellazione da Tabella1.

    Attualmente ho operato con 2 recordset ovvero:

    SELECT DISTINCT(Numero_tel) FROM Tabella1

    While not questo_rs.eof

    SELECT FROM TABELLA2 WHERE Numero_tel='questo_rs("numero_tel") AND esito ='N'
    if recordcount => 2 then
    'operazioni
    end if

    quest_rs.movenext
    wend ..

    ...bene (ovviamente ho abbreviato e di molto la parte ASP ), funziona, ma su 9000 records ci mette 3 minuti a caricare su un mio server dedicato ...e questo credo non sia cosa buona e giusta ...chi mi da na mano ?

    Grazie in anticipo.
    Webplease.it WebAgency
    www.webplease.it

  2. #2
    Utente di HTML.it L'avatar di legal-x
    Registrato dal
    Nov 2000
    Messaggi
    628
    nessuno ?
    Webplease.it WebAgency
    www.webplease.it

  3. #3
    codice:
    sql = "SELECT FROM TABELLA2 WHERE Numero_tel='" & questo_rs("numero_tel") & "' AND esito ='N' GROUP BY Numero_tel HAVING COUNT(Numero_tel) > 1"
    A questo punto il controllo sul recordCount non ti serve più.

  4. #4
    a mio avviso (per quel che si vede da quello che hai scritto) la select sulla prima tabella non ti serve più e puoi scorrere direttamente il recordset della query:
    codice:
    SELECT 
    numero_tel, COUNT(*)
    FROM tabella2
    WHERE 
    esito='N'
    GROUP BY numero_tel
    HAVING COUNT(*)>1
    in caso contrario usa una join ma (sempre per quello che si vede) scorrere il recordset della prima tabella ed eseguire ogni volta una query sulla seconda sembra inutile (e sicuramente deleterio per le prestazioni)
    xxx

  5. #5
    Utente di HTML.it L'avatar di legal-x
    Registrato dal
    Nov 2000
    Messaggi
    628
    mems 1 domanda e un osservazione:


    "Having Count(numero_tel) > 1" .... >1 perchè devo contare lo zero, e quindi > 1 vuol dire che c'è N nell'esito almeno 2 volte ?

    In questo modo mi risparmio solamente l'operazione recordcount ..(che sicuramente potrebbe rallentare il tutto, visto nell'ottica dei 9000 records) ...ma alla fine devo sempre aprire 2 recordset, o meglio ne apro uno ...e nel ciclo while del primo (dove scorro i record) faccio il recordset con la query che mi hai postato ... ..rimane cmq molto lento.
    Webplease.it WebAgency
    www.webplease.it

  6. #6
    Si, prende in considerazioni quelli la cui presenza sia superiore ad 1.
    Non credo che 900 record possano creare un problema grosso.
    Non so quale sia la tua prima query, ma puoi provare ad unificare tutto.

  7. #7
    Utente di HTML.it L'avatar di legal-x
    Registrato dal
    Nov 2000
    Messaggi
    628
    in effetti mi ero complicato la vita ...HAVING COUNT mi ha aperto la mente !

    ho risolto evitando la prima query (quindi non scorro tutta la prima tabella), faccio una query come da te suggerito sulla seconda, e poi nel ciclo di scorrimento dei record di questa query, faccio l'eventuale cancellazione !


    Grazie, Mems, grandeee !
    Webplease.it WebAgency
    www.webplease.it

  8. #8
    Originariamente inviato da legal-x
    in effetti mi ero complicato la vita ...HAVING COUNT mi ha aperto la mente !
    ...............................
    ...e questa

    codice:
    SELECT * FROM Tabella1
    Where Telefono IN (Select telefono from Tabella1 group by telefono having count(*)>1)
    proposta in questa discussione :SELECT WHERE campo si ripete 2 volte

    non ti suggerisce nulla se sostituisci SELECT con DELETE :rollo:

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.