Plusieurs fois, il m'a été demandé sur des forums comment faire une requête qui retourne des enregistrements aléatoires. Dans les lignes qui suivront, nous tenterons d'y voir un peu plus clair.
Après quelques recherches sur le web, j'ai pu trouver des exemples pour SQL-Server et MySQL seulement.
La façon proposée sous SQL Server est la suivante :
select * from TABLE order by newid()
La façon proposée sous MySQL est la suivante :
Select * From TABLE Order By RAND()
Mais qu'en est-il des autres SGBD ?
J'ai développé une code qui permet la pige aléatoire d'un enregistrement dans un jeu d'enregistrements (recordset).
Voici le code en question :
<% ' Définition du connection string ' le fichier "adovbs.inc" contient les constantes ADO %> <!-- #include file="Include/Connection.asp" --> <!-- #include file="Include/adovbs.inc" --> <%
Dim SQL, rs, MyConn Dim NbRecord, Pos
' Définition de la requête SQL SQL = "Select * From SousListe"
' Instance de la connection et du recordset set MyConn = Server.CreateObject("adodb.connection") Set Rs = Server.CreateObject("Adodb.recordset")
' Ouverture de la base 'Note : ConnectionString votre connection a votre BD MyConn.Open ConnectionString
' Ouverture du recordset Rs.Open Sql, MyConn , adOpenStatic, adLockPessimistic
' Requete vide ? If Not Rs.EOF Then ' Se positionner au dernier record Rs.MoveLast ' Se positionner au premier record Rs.MoveFirst ' Saisir le nombre de record NbRecord = Rs.RecordCount
' Initialize random-number generator. Randomize
' Définir la position a atteindre Pos = Int((NbRecord * Rnd)) ' Se positionner au record aléatoire Rs.Move (Pos)
' Afficher le champ2 Response.Write rs("Nom") End If
' Fermeture du recordset Rs.Close
' Fermeture de la connection MyConn.Close
' Destruction des instances Set MyConn = Nothing Set rs = Nothing