+ Rispondi alla Discussione
Risultati da 1 a 15 di 15

Non elencare nella select i duplicati dallo split

Ultimo Messaggio di artcava il:
  1. #1
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35

    Non elencare nella select i duplicati dallo split

    Ciao non so come evitare la duplicazione dei risultati dallo split, premetto che lo script funziona
    Codice:
    <% loca = request.querystring("loc")  sql = "SELECT DISTINCT localita FROM offerte WHERE tipo = '" & request.querystring("mod") & "' GROUP BY localita" Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sql, Conn, 3  if rs.eof then else %> <td > <select size="1" name="loc" onchange='this.form.submit()'>  <% rs.MoveFirst  Do While Not rs.EOF  controllo = rs.fields("localita")  arryControllo = Split(Controllo, ", ")   For i=0 to UBound(arryControllo)  stringa = Trim(arryControllo(i))  %>  <option value="<%=stringa%>"<%if loca = "" & stringa & "" then%>selected="selected"<%end if%> ><%=stringa%></option> <% Next  rs.MoveNext Loop rs.Close set rs = Nothing end if %>
    Grazie

  2. #2
    Moderatore L'avatar di artcava
    Data Registrazione
    Dec 2006
    Località
    Torino
    Messaggi
    272
    Segui artcava su Twitter Aggiungi artcava su Google+ Aggiungi artcava su Facebook Aggiungi artcava su Linkedin Visita il canale Youtube di artcava
    Ciao djjunior, prima domanda:

    Perché nel campo localita della tabella offerte ci sono campi separati da virgola?

    Ciò vuol dire che se nella prima riga ci sono "parma, firenze, modena" e nella seconda riga "torino, parma, milano", necessariamente nella tua lista avrai parma due volte...

  3. #3
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35
    Ciao.. si nelle righe del campo località ci possono essere città replicate come indichi tu. Posso ovviare? E come? Grazie

  4. #4
    Moderatore L'avatar di artcava
    Data Registrazione
    Dec 2006
    Località
    Torino
    Messaggi
    272
    Segui artcava su Twitter Aggiungi artcava su Google+ Aggiungi artcava su Facebook Aggiungi artcava su Linkedin Visita il canale Youtube di artcava
    Rispettando la "Prima Forma Normale".
    Dovresti scomporre la colonna "localita" in una tabella dipendente dalla prima "offerte".

    A questo punto con una JOIN tra le due funzionerà anche la DISTINCT.

  5. #5
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35
    Puoi farmi un esempio? Non ho capito come fare, grazie

  6. #6
    Moderatore L'avatar di artcava
    Data Registrazione
    Dec 2006
    Località
    Torino
    Messaggi
    272
    Segui artcava su Twitter Aggiungi artcava su Google+ Aggiungi artcava su Facebook Aggiungi artcava su Linkedin Visita il canale Youtube di artcava
    La tabella "offerte" attualmente contiene le colonne tipo e localita, dovrebbe contenerne altre come ad esempio un IDOfferta o simili che dovrebbe essere la chiave della tabella.

    Se è così, dovresti creare una seconda tabella ("Localita" ad es.), che dovrebbe avere una sua chiave, un riferimento alla tabella "offerte" [ForeignKey], diciamo fkOfferte, e infine il nome della località (ad es. nome). Ogni riga di "Localita" contiene una sola località e il riferimento alla tabella "Offerte".

    A questo punto potrai eseguire una query di questo tipo:

    Codice:
    SELECT DISTINCT Localita.nome FROM Localita LEFT JOIN offerte WHERE offerte.tipo = '" & request.QueryString("mod") & "'
    Tutti i dati attualmente raccolti dovranno essere riversati nella nuova tabella con il riferimento (fkOfferte) giusto e d'ora in avanti dovrai salvare le località nella nuova tabella.

  7. #7
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35
    Grazie ARTCAVA, creare una nuova tabella al momento sarebbe alquanto complicato perchè si tratterebbe di modificare il db.
    Mi hanno segnalato questo codice da sostituire allo split, ma non so come implementarlo al mio script, puoi darmi una mano?
    Codice:
    Function SplittaDistinct(str,sep)
        dim strx, sepx, arr, i, dic
        set dic=Server.CreateObject("Scripting.Dictionary")
        arr = Split(str,sep)
        strx=""
        sepx=""
        for i=LBound(arr) to UBound(arr)
            if not dic.Exists(arr(i)) then
                strx=strx & sepx & arr(i)
                dic.Add arr(i),true
                sepx=sep
            end if
        next
    Grazie

  8. #8
    Moderatore L'avatar di artcava
    Data Registrazione
    Dec 2006
    Località
    Torino
    Messaggi
    272
    Segui artcava su Twitter Aggiungi artcava su Google+ Aggiungi artcava su Facebook Aggiungi artcava su Linkedin Visita il canale Youtube di artcava
    Ciao djjunior, non vorrei sembrarti pedante, ma modificare il DB per me è mandatorio... Qualsiasi altro "accrocchio"-code sarebbe ridondante ed inutile, nonché ricettacolo di futuri problemi o errori.

    Scusami se sono schietto e diretto, ma questo è il mio modesto pensiero.

  9. #9
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35
    Ciao ARTCAVA,
    ho seguito il tuo suggerimento ho impostato così il db:


    TABELLA : OFFERTE


    CAMPI:
    cod_cliente
    tipo




    NUOVA TABELLA : LOCALITA




    CAMPI:
    cod_cliente
    localita


    (ogni località ha come key cod_cliente, uguale su entrambi le tabelle) tipo


    id 1
    cod_cliente 167618
    localita MILANO
    id 2
    cod_cliente 167618
    localita ROMA
    id 3
    cod_cliente 167618
    localita NAPOLI
    id 4
    cod_cliente 387363
    localita MILANO
    id 5
    cod_cliente 387363
    localita ROMA


    Ecco ora non riesco a fare la query, per leggere i dati, perche sotto tue suggerimento ho fatto questa query:


    SELECT DISTINCT localita.localita FROM localita LEFT JOIN offerte WHERE offerte.tipo_pasto = '" & request.QueryString("mod") & "'


    purtroppo ho questo errore sulla query: [Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause.


    Premetto che ho fatto prima una prova relazionando le tabelle con il solo campo "cod_cliente"


    ma anche senza relazione ed ho sempre il suddetto errore


    Dove sbaglio, grazie per il tuo aiuto.
    G.

  10. #10
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35
    modificando lo script così:
    Codice:
    sql = "SELECT localita.localita FROM localita LEFT JOIN offerte ON localita.cod_cliente = offerte.cod_cliente WHERE offerte.tipo_pasto = '" & request.QueryString("mod") & "'"
    Ho questo errore:
    Codice:
    Response object error 'ASP 0251 : 80004005'Response Buffer Limit Exceeded/offerta.asp, line 0
    Execution of the ASP page caused the Response Buffer to exceed its configured limit.
    




  11. #11
    Moderatore L'avatar di artcava
    Data Registrazione
    Dec 2006
    Località
    Torino
    Messaggi
    272
    Segui artcava su Twitter Aggiungi artcava su Google+ Aggiungi artcava su Facebook Aggiungi artcava su Linkedin Visita il canale Youtube di artcava
    Eccomi:
    la tabella OFFERTE secondo me dovrebbe avere i seguenti campi:

    id
    cod_cliente
    tipo

    Mentre la tabella LOCALITA:

    id
    offertaid
    nome

    Riprendo l'esempio iniziale

    OFFERTE:

    id (key) cod_cliente tipo
    1 12345 A
    2 12345 A






    LOCALITA:

    id (key) offertaid (foreign key) nome
    1 1 Parma
    2 1 Roma
    3 1 Milano
    4 2 Torino
    5 2 Napoli
    6 2 Parma












    La relazione è tra offertaid della tabella LOCALITA e id della tabella OFFERTE

    Spero così di aver chiarito cosa intendessi all'inizio

  12. #12
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35
    Scusa x capire, xchè nn posso utiLizzare il campo codice cliente come relazione tra tabelle?

  13. #13
    Moderatore L'avatar di artcava
    Data Registrazione
    Dec 2006
    Località
    Torino
    Messaggi
    272
    Segui artcava su Twitter Aggiungi artcava su Google+ Aggiungi artcava su Facebook Aggiungi artcava su Linkedin Visita il canale Youtube di artcava
    Perché così avevo capito...

    Mi sa che devi spiegarmi cosa devi fare senza parlare di tabelle o campi... Le cosiddette specifiche funzionali e non quelle tecniche.

    La località è legata all'offerta o al cliente?

  14. #14
    User
    Data Registrazione
    Aug 2008
    Messaggi
    35
    In pratica se vedi al primo mio post avevo necessità di splittare le località perché l avevo inserite in un campo chiamato Località della tabella offerte. Ma c era il problema dei duplicati e tu mi hai suggerito di suddividere su altra tabella solo le localita, una per ogni rigo. Ora ieri t ho inviato come è costruito ora il db e ho relazionato un campo univoco tra di loro e cioè il codice cliente che è un campo testo nel db e contiene lettere e numero tipo: xg565d. Le località sono legate all offerta tramite questa relazione Quindi la query deve essere che quando il TIPO è presente nel db deve elencarmi nelle option della select le localita di tutte le offerte presenti con quel TIPO evitando i duplicati. Spero di essermi spiegato, vedi comunque mio.post di ieri come ho impostato il db ora e vedi dove sbaglio la query. Perché è la query che sbaglio ma nn so dove. Grazie

  15. #15
    Moderatore L'avatar di artcava
    Data Registrazione
    Dec 2006
    Località
    Torino
    Messaggi
    272
    Segui artcava su Twitter Aggiungi artcava su Google+ Aggiungi artcava su Facebook Aggiungi artcava su Linkedin Visita il canale Youtube di artcava
    Allora, la query dovrebbe essere:

    Codice:
    SELECT DISTINCT localita.localita FROM localita LEFT JOIN offerte ON localita.cod_cliente = offerte.cod_cliente WHERE offerte.tipo_pasto = '" & request.QueryString("mod") & "'

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.