Récupérer un id au hasard d'une base de donnée access

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 207 fois - Téléchargée 31 fois

Contenu du snippet

tout est dans le titre!

Source / Exemple :


// mes objets de connexion à ma base de donnée
<%
	dim mydb
	dim oConn
	dim oRs
	dim varsql

	mydb = "DBQ=c:\\\\inetpub\\\\database\\\\mydatabase.mdb;Driver={Microsoft Access Driver (*.mdb)};DriverId=25" 
	set oConn = server.createobject("ADODB.Connection")
	oConn.Open mydb 
	set oRs = server.createobject("adodb.recordset")
%>

// ma boucle qui lance la fonction jusqu'à ce que l'ID obtenu existe
<%
do while id_ok = 0 'tant que l'id_ok est égal à 0 on execute la fonction
   gen_id()	
loop
response.write mygen_id & " est l'ID séléctionné au hasard de ma table"
%>

// ma fonction qui récupère l'id au hasard
<%
function gen_id()
	varsql = "SELECT max(image.id) as max_id, min(image.id) as min_id FROM image" 'la requête SQL qui selectionne l'id le plus bas et le plus haut
	oRs.open varsql, oConn 'j execute la requete
		max_id = oRs.fields("max_id") 'j attribue l'ID le plus haut à la variable
		min_id = oRs.fields("min_id") 'j attribue l'ID le plus bas à la variable

	oRs.close 'je ferme mon recordset
	Randomize   ' je genère un nombre entre max_id et min_id	MyValue = Int((max_id - min_id + 1) * Rnd + min_id)

	varsql = "SELECT id FROM image WHERE id = " & myvalue 'la requete SQL qui vérifie que le numero généré existe
	oRs.open varsql, oConn 'j execute la requete	
	if oRs.eof then 'si le recordset est vide
		id_ok = 0
	else 's il n est pas vide, l'ID existe
		id_ok = 1
		mygen_id = myvalue 'mygen_id est maintenant la variable qui contient l'ID séléctionné au hasard!!
	end if	
	oRs.close 'on ferme le recordset
end function 'fin de la fonction
%>

Conclusion :


J'ai pensé que ca pourrait etre utile pour certain vu comme j'ai galeré pour trouver une solution. Imaginons que vous avez un site avec un album photo (beaucoup de photo) et que vous décidez de faire une page qui afficherais une photo au hasard tout les jours. Toutes les infos de vos photos sont bien sur stockées dans une base de donnée access.
Illustration de la table IMAGE:
ID (n° auto; clé primaire) | image (texte)

pour info: lorsqu'une image est supprimée de la table son ID n'existe plus, il y a donc un trou (ex: 32, 34, 35). C'est à cause de cela que ce système est plus compliqué :)

Voilà maintenant pour séléctionner un ID au hasard parmis les 1000 présents dans la table je fonctionne de la manière suivante:
- on selectionne dans la table IMAGE l'ID le plus bas et le plus haut (ex: 3 et 700)
- on génère un n° au hasard compris entre l'ID le plus bas (3) et l'ID le plus haut (700)
- on regarde si le n° génèré existe dans la table IMAGE
- s'il existe, on affiche l'image, sinon on regenere un n° etc...

Bien entendu avec les explications données une image au hasard s'affichera à chaque visite sur la page et non chaque jour (pour 1 tout les jours il suffit de créer une 2eme table avec un seul enregistrement qui comprend l'ID de l'image et la date d'affichage puis faire une comparaison des date et executer le script ou non)

Si y a des questions posez les.
A+

A voir également

Ajouter un commentaire Commentaires
Boreux Messages postés 45 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 29 novembre 2010
16 déc. 2005 à 12:23
Sympa ce source, mais si il y a eu beaucoup de suppressions, il risque de boucler de nombreuses fois avant de trouver une image disponible (je sais, je chicane, mais bon).

Perso, j'ai chargé tous les ID existants dans une table mémoire, puis j'aurais généré un numéro aléatoire qui m'aurait "balladé" dans cette table... Au moins, l'image existe à chaque fois ;-)
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
6 janv. 2004 à 10:09
Très intéressant.

F___

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.