- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- Non elencare nella select i duplicati dallo split
-
Ciao.. si nelle righe del campo località ci possono essere città replicate come indichi tu. Posso ovviare? E come? Grazie
-
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.
-
Puoi farmi un esempio? Non ho capito come fare, grazie
-
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:
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.
-
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?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
-
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.
-
Ciao ARTCAVA,
ho seguito il tuo suggerimento ho impostato così il db:TABELLA : OFFERTE
CAMPI:
cod_cliente
tipoNUOVA 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 ROMAEcco 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.
-
modificando lo script così:
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:
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.
-
Eccomi:
la tabella OFFERTE secondo me dovrebbe avere i seguenti campi:id
cod_cliente
tipoMentre la tabella LOCALITA:
id
offertaid
nomeRiprendo l'esempio iniziale
OFFERTE:
[TABLE="class: grid, width: 200, align: left"]
[TD]id (key)[/TD]
[TD]cod_cliente[/TD]
[TD]tipo[/TD]
[/TR][TD]1[/TD]
[TD]12345[/TD]
[TD]A[/TD]
[/TR][TD]2[/TD]
[TD]12345[/TD]
[TD]A[/TD]
[/TR]
[/TABLE]LOCALITA:
[TABLE="class: grid, width: 200, align: left"]
[TD]id (key)[/TD]
[TD]offertaid (foreign key)[/TD]
[TD]nome[/TD]
[/TR][TD]1[/TD]
[TD]1[/TD]
[TD]Parma[/TD]
[/TR][TD]2[/TD]
[TD]1[/TD]
[TD]Roma[/TD]
[/TR][TD]3[/TD]
[TD]1[/TD]
[TD]Milano[/TD]
[/TR][TD]4[/TD]
[TD]2[/TD]
[TD]Torino[/TD]
[/TR][TD]5[/TD]
[TD]2[/TD]
[TD]Napoli[/TD]
[/TR][TD]6[/TD]
[TD]2[/TD]
[TD]Parma[/TD]
[/TR]
[/TABLE]La relazione è tra offertaid della tabella LOCALITA e id della tabella OFFERTE
Spero così di aver chiarito cosa intendessi all'inizio
-
Scusa x capire, xchè nn posso utiLizzare il campo codice cliente come relazione tra tabelle?
-
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?
-
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
-
Allora, la query dovrebbe essere:
SELECT DISTINCT localita.localita FROM localita LEFT JOIN offerte **ON localita.cod_cliente = offerte.cod_cliente** WHERE offerte.tipo_pasto = '" & request.QueryString("mod") & "'