Capita spesso di avere la necessità di selezionare un record a caso da una tabella. Ci sono diverse strade per arrivare allo stesso risultato, ma alcune sono più dirette e soprattutto offrono performance superiori.
Con questo articolo affronteremo questo argomento utilizzando i tre database più comunemente utilizzati con le ASP: SQL Server, Access e MySQL.
Come esempio utilizzeremo una tabella tblProverbi, costituita da due campi: id (chiave primaria) e Proverbio.

SQL Server
SQL Server ci mette a disposizione la funzione Rand(), funzione che ritorna un numero a virgola mobile compreso tra 0 e 1.
Possiamo quindi procedere in due modi: creare una Stored Procedure in SQL Server oppure utilizzare una classica query; i vantaggi che derivano dall'utilizzo dell'uno o dell'altro metodo sono abbastanza soggettivi: le Stored Procedures sono molto più performanti di una query, ma molto meno portabili.
Cominciamo dalla Stored Procedures.
Per prima cosa abbiamo bisogno di sapere il valore di id più alto, valore che estrarremo dalla tabella utilizzando la funzione Max() e che salveremo nella variabile @MaxValue:
SELECT @MaxValue = Max(id) FROM tblProverbiOra che abbiamo ottenuto il valore di id massimo, calcoliamo un valore casuale, che salveremo in @RandomNumber, utilizzando la funzione Rand():
SELECT @RandomNumber = rand() * @MaxValue Fatto questo non ci resta che estrarre il nostro record utilizzando il numero casuale appena creato:
SELECT TOP1 *
FROM tblProverbi
WHERE id >= @RandomNumber
ORDER BY id ASCDa notare l'utilizzo dell'operatore >=, che ci evita spiacevoli sorprese nel caso il numero casuale generato coincida con un id inesistente.
La Stored Procedure completa si presenterà quindi così:
CREATE PROCEDURE sp_Random
AS
BEGIN
Declare @MaxValue int, @RandomNumber float
SELECT @MaxValue = Max(id) FROM tblProverbi
SELECT @RandomNumber = rand() * @MaxValue
SELECT TOP 1 *
FROM tblProverbi
WHERE id >= @RandomNumber
ORDER BY id ASC
ENDPer applicare tale Stored Procedure ci basterà seguire questo script:
<%
Set con = Server.CreateObject("ADODB.Connection")
con.Open strConn ' da valorizzare
set rs = con.Execute("sp_Random")
If Not rs.Eof Then
Response.Write rs("id") & " - " & rs("proverbio")
Else
Response.Write "Nessun proverbio da visualizzare"
End If
rs.Close : Set rs = Nothing
con.Close : Set con = Nothing
%>E se invece di utilizzare un Stored Procedure volessimo utilizzare una semplice query SQL?
La logica è la stessa, basterà tradurre la Stored Procedure in una normale SELECT:
<%
Set con = Server.CreateObject("ADODB.Connection")
con.Open strConn ' da valorizzare
SQL = "SELECT TOP 1 * FROM tblProverbi WHERE id >= (rand() * (SELECT MAX(id) FROM tblProverbi))"
set rs = con.Execute(SQL)
If Not rs.Eof Then
Response.Write rs("id") & " - " & rs("proverbio")
Else
Response.Write "Nessun proverbio da visualizzare"
End If
rs.Close : Set rs = Nothing
con.Close : Set con = Nothing
%>
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!