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


jer2701
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 338
Inscription: 2 Sep 2005

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

Message le Sam Jan 14, 2006 12:16

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.
Dernière édition par jer2701 le Dim Jan 15, 2006 12:25, édité 1 fois.


Baronz
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 302
Inscription: 28 Avr 2005

Message le Sam Jan 14, 2006 12:34

Ben oui, en php :) par exemple:

je reprend un bout de mon code :

Code: Tout sélectionner
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
WRInaute occasionnel
 
Messages: 338
Inscription: 2 Sep 2005

Message le Sam Jan 14, 2006 12:50

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
WRInaute discret
 
Messages: 62
Inscription: 27 Aoû 2005

Message le Sam Jan 14, 2006 15:39

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: Tout sélectionner
[...]
$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 occasionnel
WRInaute occasionnel
 
Messages: 302
Inscription: 28 Avr 2005

Message le Sam Jan 14, 2006 17:12

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
WRInaute occasionnel
 
Messages: 338
Inscription: 2 Sep 2005

Message le Sam Jan 14, 2006 19:49

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
WRInaute occasionnel
 
Messages: 338
Inscription: 2 Sep 2005

Message le Sam Jan 14, 2006 20:00

Baronz a écrit: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
WRInaute discret
 
Messages: 62
Inscription: 27 Aoû 2005

Message le Sam Jan 14, 2006 20:34

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: Tout sélectionner
$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é
WRInaute impliqué
 
Messages: 526
Inscription: 1 Sep 2004

Message le Sam Jan 14, 2006 22:13

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

?

Albataur
WRInaute discret
WRInaute discret
 
Messages: 62
Inscription: 27 Aoû 2005

Message le Dim Jan 15, 2006 2:30

MarvinLeRouge a écrit:Attendez attendez, on va faire plus simple.
Pourquoi pas tout bêtement
Code: Tout sélectionner
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
WRInaute occasionnel
 
Messages: 338
Inscription: 2 Sep 2005

Message le Dim Jan 15, 2006 12:24

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 !!!


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités