Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Random condizionato

  1. #1

    Random condizionato

    Salve a tutti,

    questo pezzo di codice mi estrae da access dei record casuali ... e fino a qui e tutto ok, me s volessi aggiungere un peso all'estrazione, cioè dare a un record piu possibilita di uscire rispetto ad un'altro (ho un campo numerico che ho chiamato peso da 1 a 99 ) come posso procedre ?


    Data = "20120104"

    SQL = "SELECT Max(ID) AS MaxID, Min(ID) AS MinID FROM BANNER_Gestione Where Data = '"&Data&"' And NumeroBox = 1 "
    Set Rs=Conn.Execute(SQL)

    Dim maxID, minID, rndID
    maxID = Rs("MaxID")
    minID = Rs("MinID")

    Randomize
    rndID = Int((maxID - minID + 1) * Rnd + minID)

    SQL = "SELECT * FROM BANNER_Gestione WHERE ID >= " & rndID
    Set Rs= Conn.Execute(SQL)

    Response.Write(Rs("ID"))
    Pippo Giacalone
    giacalone@tin.it

  2. #2
    nessun suggerimento ?
    Pippo Giacalone
    giacalone@tin.it

  3. #3
    l'unica cosa che mi viene in mente è di preparare una tabella d'appoggio dove gli id sono ripetuti N volte (dove N è il peso); quindi un ID ripetuto 20 volte ha più probabilità di essere estratto di uno ripetuto una volta soltanto.

    Mi sembra di ricordare che ne avessimo già parlato (e la soluzione NON era questa), vedi se trovi qualcosa in archivio.

  4. #4
    ho cercato in archivio ma non ho trovato nulla
    Pippo Giacalone
    giacalone@tin.it

  5. #5
    Originariamente inviato da peppeweb
    ho cercato in archivio ma non ho trovato nulla
    quindi rimane l'altra idea

  6. #6
    scusa optime, se non ho capito male, prima di lanciare la query faccio un'insert in una tabella di appoggio e ripeto l'insert * peso.
    Poi lancio la query ma a questo punto la lancio dalla tabella di appoggio ???

    Ho detto una castroneria ?
    Pippo Giacalone
    giacalone@tin.it

  7. #7
    corretto. però la tabella di appoggio io la riempirei solo quando cambiano i banner, non starei a riempirla tutte le volte!

  8. #8
    ah quindi in fase di creazione !!

    bella idea, grazie optime
    Pippo Giacalone
    giacalone@tin.it

  9. #9
    poi quando hai fatto posta la soluzione, è un argomento interessante

  10. #10
    ho fatto in questo modo:

    quando inserisco il banner (che poi non è prorio un banner) faccio cosi:

    inserisco i dati nei vari campi della testata

    codice:
    SQL = "INSERT INTO BANNER_Gestione ( " &_
    " DataInserimento, " &_ 
    " NumeroBox, " &_ 
    " Data, " &_ 
    " Peso, " &_ 
    " Random, " &_ 
    " MassimoBanner, " &_ 
    " Visibile) " &_ 
    " VALUES ( " &_ 
    " "&DataOggi&", " &_ 
    " "&Box&", " &_ 
    " '"&Data&"', " &_ 
    " "&Peso&", " &_ 
    " "&Random&", " &_ 
    " "&MassimoBanner&", " &_ 
    " "&Visibile&") "
    'response.write(sql):response.end
    set Rs=Conn.execute(Sql)

    poi prendo il valore dell'ID creato:

    SQL = "SELECT @@IDENTITY FROM BANNER_Gestione"
    Set Rs = Conn.Execute(SQL)
    ID_Banner = Rs(0)


    e poi prendo il valore del campo PESO e creo in una tabella temporanea tanti record quanto è il numero peso:

    For p = 1 to Peso
    SQL = "INSERT INTO BANNER_GestioneTEMP (ID_Banner, NumeroBox, Data) VALUES ( "&ID_Banner&", "&Box&", '"&Data&"') "
    set Rs=Conn.execute(Sql)
    Next


    a questo punto la query di prima la lancio in questa tabella e pare che funzioni ..... la testero nei prossimi giorni

    codice:
    Data = "20120104"
    
    SQL = "SELECT Max(ID) AS MaxID, Min(ID) AS MinID FROM BANNER_GestioneTEMP Where Data = '"&Data&"' And NumeroBox = 1" 
    Set Rs=Conn.Execute(SQL) 
    
    Dim maxID, minID, rndID
    maxID = Rs("MaxID")
    minID = Rs("MinID") 
    
    Randomize
    rndID = Int((maxID - minID + 1) * Rnd + minID)
    
    SQL = "SELECT * FROM BANNER_GestioneTEMP WHERE ID >= " & rndID
    Set Rs= Conn.Execute(SQL)
    
    Response.Write(Rs("ID_Banner"))
    il codice non sarà per niente pulito ma il concetto che diceva optime credo sia questo.

    Grazie mille
    Pippo Giacalone
    giacalone@tin.it

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.