JeuWeb - Crée ton jeu par navigateur
[Résolu] Sélection SQL et hasard orienté - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Sélection SQL et hasard orienté (/showthread.php?tid=1600)



[Résolu] Sélection SQL et hasard orienté - Eluox - 22-04-2008

Bonjour, je me heurte a un probleme,

J'ai une table user, avec un champ credit,pseudo,id ect
J'ai une autre table stockant des sites, qui contient un champ id, id_user ( l'id du gars a qui appartient le site), l'url et le nom.

Je voudrais selectionné aléatoirement des url dans la table, je fais donc une requête avec un
Code PHP :
<?php 
ORDER BY RAND
()
Le problème, c'est que je voudrais rajouter un paramètre.

Selectionné aléatoirement dans la table de sites, en fonctions des credits de l'user

Plus l'user a de credits, plus le site a de chance d'être tiré de la table.

J'espere vous comprenez ce que je veux dire, mais moi, j'y arrive pas ( et si j'y arrive sa fera exploser mon serveur Big Grin)

Cordialement,


RE: Selection base de donnée en fonction d'un champ mais aléatoirement - Dolphy - 22-04-2008

Petite solution de code de papy la bricole :

Tu fais un SELECT credit FROM ta_table ORDER by credit DESC limit 1
Normalement tu te retrouve avec une variable contenant le plus haut crédit possédé par un joueur.
Après tu fais un :
$mini = rand(0,$credit_max);
Et après tu fais un :
SELECT tes_champs FROM ta_table WHERE credit>=$mini ORDER BY RAND()

Théoriquement avec ta première génération aléatoire tu élimines aléatoirement ceux qui ont moins d'un certain nombre de crédit
Et avec le order by rand() tu refais une selection d'un seul parmis ceux qui sont passés au travers de la première sélection.

Je sais c'est pas très clair mais ça peut être une solution


RE: Selection base de donnée en fonction d'un champ mais aléatoirement - Belsion - 23-04-2008

Je te propose ça, mais à voir niveau performance ce que ça va donner
Citation :SELECT site.url, site.nom, ... , (user.credit*RAND()) AS randNumber FROM site
INNER JOIN user ON user.id = site.id_user
ORDER BY randNumber DESC

Et tu dois aussi pouvoir faire directement:
Citation :SELECT site.url, site.nom, ... FROM site
INNER JOIN user ON user.id = site.id_user
ORDER BY (user.credit*RAND()) DESC



RE: Selection base de donnée en fonction d'un champ mais aléatoirement - Eluox - 23-04-2008

A locker
Thanks All
Cordialement Big Grin