[RESOLU] Requête SQL sur condition aléatoire

jer2701

WRInaute occasionnel
salut !!

Est-il possible de lancer une requête SQL sur un "id" randomiser ? ... 8O
Je m'explique : je voudrais lancer des affichages aléatoires d'enregistrements d'une même base.
 

Baronz

WRInaute discret
Ben oui, en php :) par exemple:

je reprend un bout de mon code :

Code:
include("connect.php");

$reqs = mysql_query("SELECT id,titre,des1 FROM c2_website'") or die ("erreur req ".mysql_error());
$nums = mysql_num_rows($reqs); // Je sélectionne le nombre d'enregistrement
$dd2= date("Ymd");
$random1 = ($dd2%$nums)+1; // un nombre aléatoire par rapport à la journée par exemple
$reqs = mysql_query("SELECT * FROM c2_website limit $random1, 1") or die ("erreur req ".mysql_error()); // ensuite ma requète je la fait avec un limit car j'ai des trous dans mes enregistrements....
  while($rows = mysql_fetch_array($reqs)) { 

// Ton affichage
}

Ce code permet en fait de sélectionner le site du jour aléatoirement :)
 

jer2701

WRInaute occasionnel
Merci c cool :D ,

mais dis moi le $nums y sert à koi là ?

$random1 = ($dd2%$nums)+1; --> à dire que tu fais le random sur $nums enregistrments ?? :?:
 

Albataur

WRInaute discret
Heu ... je ne vois pas où est l'aléatoire dans ton script :?:
Tu n'aurais pas oublié une fonction par hasard ?

Je dirais plutôt ça moi :

Code:
[...]
$random1=rand(0, $nums-1);
[...]

Qui va te générer un nombre pseudo-aléatoire entre 0 et le nombre de tuples dans ta table.
Par contre, est-ce que tous les ids entre 0 et le nombre de tuples sont utilisés ? Si tu utilises un id auto_increment et que tu as supprimé des lignes entre temps tu risques d'avoir des problèmes. Ce script ne fonctionne que si tu n'as pas de "trou" dans tes ids.
 

Baronz

WRInaute discret
En effet j'ai oublié le rand qque part :S

En fait non je me suis trompé j'ai fait une version aléatoire simplement en fonction du JOUR et non avec le rand...

en fait j'utilisais $nums car il représente le nombre d'enregistrement dans ma base de données. Donc je cherche une variable de 0 à $nums et je l'utilise ensuite dans ma requète afin que je sois sur qu'il ne prennent pas par exemple 56, et j'ai pas d'id 56 dans ma db ... à cause d'une suppression ou autres :D

Sinon comme dit albataur, son code suffit :)
 

jer2701

WRInaute occasionnel
ouais effectivment je voudrais faire mon random sur les "id" automatiques uniques .. et effectivement j'ai des enregistrements supprimés ...
donc ça craints ?!

Y a pas moyen de faire un truc du style si $random="" alors $random="$random+1" ou truc dans le genre ?
 

jer2701

WRInaute occasionnel
Baronz a dit:
En fait j'utilisais $nums car il représente le nombre d'enregistrement dans ma base de données. Donc je cherche une variable de 0 à $nums et je l'utilise ensuite dans ma requète afin que je sois sur qu'il ne prennent pas par exemple 56, et j'ai pas d'id 56 dans ma db ... à cause d'une suppression ou autres :D

Ouais mais là $nums te donne le nombre totals d'enregistrements mais pas les "id" manquants .. 8O

Bon je fais mes tests avec vos deux solutions et vous tiens au courant... merci en tout cas .. :)
 

Albataur

WRInaute discret
Dans ce cas là tu peux faire comme ça :
- tu fait ta requète en prenant toutes tes lignes
- tu tires un nombre au hasard compris entre 0 et ton nombre de tuples
- tu accèdes à ton tuple tiré au hasard grâce à cette fonction : mysql_data_seek (resource result , int row_number)

Ce qui donne :
Code:
$reqs = mysql_query("SELECT id,titre,des1 FROM c2_website'") or die ("erreur req ".mysql_error());
$nums = mysql_num_rows($reqs); // Je sélectionne le nombre d'enregistrement

$rand_id = rand(0,($nums-1)); // un nombre aléatoire par rapport à la journée par exemple

//On déplace le pointeur interne de mysql
mysql_data_seek($reqs,$rand_id);

//Tu récupères les données
$pouet = mysql_fetch_array($reqs);
 

MarvinLeRouge

WRInaute impliqué
Attendez attendez, on va faire plus simple.
Pourquoi pas tout bêtement
Code:
select truc
from machin
order by rand()
limit combienTenVeux
?
 

Albataur

WRInaute discret
MarvinLeRouge a dit:
Attendez attendez, on va faire plus simple.
Pourquoi pas tout bêtement
Code:
select truc
from machin
order by rand()
limit combienTenVeux
?
:?:
Ca va t'ordonner les résultats par rapport à une colonne (syntaxe : ORDER BY [nom ou num de colonne]) donc je pense pas que ça va beaucoup l'aider.
 

jer2701

WRInaute occasionnel
Bon ok ça marche, merci à fonds les boulons notamment à Baronz 8) et Albataur 8) ...

Voici donc le code définitif et validé de la fonction que je voulais pour ceux que ça intérresse :

$affich_client = mysql_query("SELECT * FROM la_table");
$nbr=mysql_numrows($affich_client);
$rand_id=rand(0,($nbr-1));
mysql_data_seek($affich_client,$rand_id);
et après un list de $affich_client et ça roule ....

A chaque actualisation de page l'enregistrement selectionné et différent.
:p merci !!!
 

Discussions similaires

Haut