Newsgroup: it.comp.www.asp
Titolo: estrarre solo items *diversi tra loro*

Salve,
ho una tabella Novita contenete diversi campi tra i quali un campo Tag.
il campo tag memorizza dati in questo modo:
- item1, item2, item3
- item1,
- item3, item6 ...
voglio estrarre tutti gli item e creare per ognuno di essi un link. Per
farlo sto provando questo:
rsNovita.Source = "SELECT Tag FROM Novita ORDER BY Tag";
[...]
<%while (rsNovita.EOF == false){
  var tag = String(rsNovita("Tag").value,"").split(",");
  if (tag != "") {
    for (i=0; i<tag.length; i++){
%>
    <a
href="tag.asp?k=<%(trim(tag[i]))%>"><%(trim(tag[i]))%></a>,&nbsp;
<%
    }
  }
rsNovita.MoveNext();
}
%>
che estrae tutti i tag contenuti nella tabella novita, li splitta sul
carattere virgola e crea un link per ognuno di essi.
il problema sono i tag uguali che vengono ripetuti. Nell'esempio di
prima ottengo i link per: item1, item2, item3, item1, item3, item6.
Vorrei ottenere invece link per: item1, item2, item3, item6
C'è un sistema che possa estrarre solo tutti i tag *diversi* nella
tabella novità?
Infinite grazie a chi mi aiuta.

 Infinite grazie a chi mi aiuta.
rsNovita.Source = "SELECT Tag FROM Novita Group BY Tag";
Ciao.
-- 
Sergio MAZZA 

 rsNovita.Source = "SELECT Tag FROM Novita Group BY Tag";
mi piacerebbe risolvere con una select, ma per ora, a quel livello, gli
item contenuti nel campo Tag non sono ancora splittati, quindi facendo
come dici non ottengo gli item diversi come vorrei, ma solo i tag
diversi:
il campo tag infatti memorizza tanti item separati da virgole in questo
modo:
riga 1: item1, item2, item3
riga 2: item1,
riga 100: item3, item6 ...
Idealmente, quello che devo fare è:
- estraggo tutti gli item contenuti nel campo tag,
- splitto gli item sulla virgola,
- con una *magia* escludo le ripetizioni di item,
- procedo con la generazione dei link su ogni item
Che ne pensi?
Sergio MAZZA ha scritto:



Io proverei in questa maniera, con un recordset disconnesso
'---  apro la tabella (meglio con il parametro adForwardOnly)
rs.open "SELEC Tag FROM Novita",cnn
'--- creo il recordset disconnesso
rsDisc.Fields.Append "T",100,60
rsDisc.Open
'--- inizio il ciclo di lettura della tabella
do
    T=rs(0)
    if not rsDisc.eof then
          rsDisc.Movefirst
          rsDisc.find "T='" & rs(0) & "'"
          if rsDisc.eof
             '--- se non esiste già lo aggiungo
              rsDisc.addnew
              rsDisc("T")=rs(0)
        else
             '--- ho già inserito questo record quindi non faccio nulla
         end if
   else
        '--- è il primo record quindi aggiungo senza tema
         rsDisc.addnew
         rsDisc("T")=rs(0)
    end if
    rs.movenext
loop until rs.eof
rs.close:set rs=nothing
rsDisc.sort = "T"
'--- finalmente (spero) ho i vari tag sepati ed in ordine
do
  response.write rsDisc(0) + "<BR>"
   rsDisc.movenext
loop rsDisc.eof
rsDisc.close : set rsDisc=nothing
Scritto velocemente, senza alcun tipo di collaudo sul campo
Ciao
AlpVir
(
www.lalpinistavirtuale.it
) 

 Che ne pensi?
dovresti provare a fare una scansione dei record, a recuperare tutti i tag,
splittarli e inserirli uno ad uno in una tabella a parte, in cui mettere ID, 
TagName.
quando li inserisci ovviamente fai un controllo. se esiste, passi al 
prossimo tag (parlo
della nuova tabella, altrimenti lo inserisci)
finita l'operazione, selezioni i tag, e vai a sostituire nella prima tabella 
il nome
del tag con il relativo id. Avresti cosi' nella prima tabella un campo 
contenente
dati tipo "1,5,8,34,74"
se ho ben capito cosa vuoi fare, per la lista di tutti i tag, utilizzerai 
poi
la seconda tabella per avere la lista dei tag disponibili.
ciaps 

 %>
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 Io proverei in questa maniera, con un recordset disconnesso
[CUT]
solo che lui sta usando jscript, non vbscript ...
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

Ciao Cristiano, grazie. Sì il tutto è in JScript.
Sto provando il tuo metodo, ma mi da errore Object expected in:
      if(!arrUsati.Contain(tag[i],true)){
Posto il codice:
// per comodità creiamo un prototype che verifica se un valore è
contenuto in un array
Array.prototype.Containfunction(str,CaseInsensitive) {
  for(var x0;x<this.length;x++)

   for(var x x<this.length;x++)
io di codice vedo solo quanto sopra ... se è così manda di tutto (fu di
function, il for con una sintassi assurda...)
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

non mi ero accorto che aveva troncato un pezzo, eccolo qui tutto,
l'errore è Object expected in:
      if(!arrUsati.Contain(tag[i],true)){


   for(var x x<this.length;x++)
Nuovamente troncata ... la hai messa fuori dalla function vero?
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 ha scritto nel messaggio 
news:1b3iw5kpa6l3s$.1pvd7b08x7zgk$.dlg@40tude.net...


 ha scritto nel messaggio 
news:1b3iw5kpa6l3s$.1pvd7b08x7zgk$.dlg@40tude.net...


 alfabeticamente, prima di stamparli?
al termine di tutto (quando hai quindi il tuo array compilato) basta una
chiamata a sort che, di default, ordina in ordine alfabetico; leggiti
comunque la reference così vedi come fare, per esempio, se sono numerici:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:sort
