Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/10/2008, 02:51
Sancas
 
Fecha de Ingreso: marzo-2008
Mensajes: 96
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Nube de tags (etiquetas)

Hola, gracias por responderme, me estuve mirando los links y he sacado buenas ideas, pero ahora me surge un problema:

El proceso es el siguiente:
Establezco un número de tags a aparecer (30 por ejemplo)
Verifico que el número introducido sea menor o igual a las palabras contenidas en la base de datos
Crear array
Cojo números aleatorios
Recorrer el array para verificar que no se ha introducido con anterioridad (si ya se ha introducido no lo almacena y coje otro al azar, hasta que encuentre uno que no se haya introducido, entonces lo almacenará y pasaremos al siguiente elemento del array)

El problema viene al comprobar que si me mete números duplicados, no debo hacer bien la verificación...

No hagais caso a comentarios del tipo "escribir físicamente el array" que es código sin terminar...

Mirad donde pone en comentario FORMA1 y FORMA2

Código:
Num=int(request.Form("text1"))

'Verificamos que Num no sea mayor que el total de registros
SQL0="Select * From Nube_Tags"
Set RS0 = Server.CreateObject("ADODB.Recordset")
RS0.Open SQL0, cn,1,1
Registros=RS0.RecordCount
if(Num>Registros) then
Num=Registros
end if

RecorridoTotal=0

'Cogemos el máximo valor de la BD
SQL1="Select max(id) as maximo From Nube_Tags"
Set RS1 = Server.CreateObject("ADODB.Recordset")
RS1.Open SQL1, cn,1,3
Maximo=RS1("maximo")
Response.Write("Máximo: "& Maximo)

'Creamos el array
Dim vector()
Redim vector(Num-1)

Response.Write("<br>Aleatorios<br><br>")

while(RecorridoTotal<Num)

'Hallamos números aleatorios
Randomize
Rand = Int((Maximo) * Rnd)

'Hacer sql para coger un número al azar
SQL2="Select * From Nube_Tags where Id="&Rand
Set RS2 = Server.CreateObject("ADODB.Recordset")
RS2.Open SQL2, cn,1,3

Incluido=0

if not RS2.EOF then
'Recorrer el array para verificar que no se ha introducido con anterioridad

'FORMA 1                                 <<<----ESTO!!!!
'For i=0 to ubound(vector)
'if (vector(i)=Rand) then
'Incluido=1
'end if
'next


'FORMA 2                                 <<<----ESTO!!!!
for each valor in vector
if (valor=Rand) then
Incluido=1
end if
next

If(Incluido=0) then
'Agregarlo al array
vector(total)=Rand

'Escribir fisicamente el array

Response.Write(Rand&"<br>")
RecorridoTotal=RecorridoTotal+1
End if
End if
wend

Gracias por vuestro tiempo