Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2011, 17h49   #1
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Par défaut requete mysql apres un mt_rand

Bonjour,

J'ai une requete qui me revoir le nombre d'enregistrement présent en base
Code :
1
2
$result = mysql_query('SELECT COUNT(id_blogTous) WHERE nombase="toto"')
$nombreEnregistrement = mysql_num_rows($result);
Avec le chiffre retourner dans ma variable $nombreEnregistrement , j'utilise la fonction mt_rand pour me sortir un nombre au hasard:

Code :
$numeroHazard = mt_rand(1,$nombreEnregistrement )
Comment faire un suite pour choisir la ligne sortie par hasard ?

Merci beaucoup pour votre aide
omelhor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 18h05   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Quand tu fais un SELECT COUNT(*) tu comptes déjà le nombre d'enregistrements. Faire après un mysql_num_rows() ne sert à rien et te renverra toujours 1 !
Voic comment faire :
Code :
1
2
3
4
$qry = mysql_query('SELECT COUNT(id_blogTous) AS nbOfRec WHERE nombase="toto"');
$data = mysql_fetch_assoc($qry); //array()
$nbRec = $data['nbOfRec'];
$numeroHazard = mt_rand(1, $nbRec);
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 19h18   #3
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Citation:
Envoyé par rawsrc Voir le message
Quand tu fais un SELECT COUNT(*) tu comptes déjà le nombre d'enregistrements. Faire après un mysql_num_rows() ne sert à rien et te renverra toujours 1 !
Voic comment faire :
Code :
1
2
3
4
$qry = mysql_query('SELECT COUNT(id_blogTous) AS nbOfRec WHERE nombase="toto"');
$data = mysql_fetch_assoc($qry); //array()
$nbRec = $data['nbOfRec'];
$numeroHazard = mt_rand(1, $nbRec);
Je viens de corriger merci.
Pour en revenir a mon problème, je me rend compt que je l'ai mal exposé

Imaginons que en base j'ai ceci :

id nombase title
5 titi abc
25 ggrr def
18 titi ghi
4 llooo jkl
5 titi mno


Si passe j'applique ton code comme suit :

Code :
1
2
3
4
$qry = mysql_query('SELECT COUNT(id_blogTous) AS nbOfRec WHERE nombase="titi"');
$data = mysql_fetch_assoc($qry); //array()
$nbRec = $data['nbOfRec'];   // je vais avoir  3 enregistrement
$numeroHazard = mt_rand(1, $nbRec);
Si $numeroHazard vaut 2, comment dire a mysql de sélectionner la ligne 2 de ma requête sql qui vaut :

18 titi ghi
omelhor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 20h02   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Pour ce que tu veux faire, il vaut mieux procéder autrement :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$qry = mysql_query('SELECT * FROM taTable WHERE nombase="titi"');
// on récupère les données sous forme de tableau
// $data est tableau Array(index => array(champ => valeur)) avec champ={id, nombase, title}
// les tableaux sont indexés à partir de 0
while($data[] = mysql_fetch_assoc($qry)) { }
$numeroHazard = mt_rand(0, count($data)-1);
// pour positionner sur l'enregsitrement tiré au hasard
$record = $data[$numeroHazard];
echo $record['id'];
echo $record['nombase'];
echo $record['title'];
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 20h52   #5
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Citation:
Envoyé par rawsrc Voir le message
Pour ce que tu veux faire, il vaut mieux procéder autrement :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$qry = mysql_query('SELECT * FROM taTable WHERE nombase="titi"');
// on récupère les données sous forme de tableau
// $data est tableau Array(index => array(champ => valeur)) avec champ={id, nombase, title}
// les tableaux sont indexés à partir de 0
while($data[] = mysql_fetch_assoc($qry));
$numeroHazard = mt_rand(0, count($data)-1);
// pour positionner sur l'enregsitrement tiré au hasard
$record = $data[$numeroHazard];
echo $record['id'];
echo $record['nombase'];
echo $record['title'];
?>

J'ai compris, merci beaucoup pour votre aide et votre explication
omelhor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 22h36   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
J'ai oublié de préciser qu'il fallait faire attention avec le code que je t'ai donné, car le tableau de données va contenir une ligne de plus que le nombre d'enregistrements. Donc, il faut en tenir compte soit comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$qry = mysql_query('SELECT * FROM taTable WHERE nombase="titi"');
// on récupère les données sous forme de tableau
// $data est tableau Array(index => array(champ => valeur)) avec champ={id, nombase, title}
// les tableaux sont indexés à partir de 0
while($data[] = mysql_fetch_assoc($qry));
$numeroHazard = mt_rand(0, count($data)-2); //-1 pour le décalage de base et -1 pour l'enregsitrement vide en dernière position
// pour positionner sur l'enregsitrement tiré au hasard
$record = $data[$numeroHazard];
echo $record['id'];
echo $record['nombase'];
echo $record['title'];
?>
soit ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$qry = mysql_query('SELECT * FROM taTable WHERE nombase="titi"');
// on récupère les données sous forme de tableau
// $data est tableau Array(index => array(champ => valeur)) avec champ={id, nombase, title}
// les tableaux sont indexés à partir de 0
$data = array();
while($row = mysql_fetch_assoc($qry)) {
   $data[] = $row;
}
$numeroHazard = mt_rand(0, count($data)-1); //-1 pour le décalage de base
// pour positionner sur l'enregsitrement tiré au hasard
$record = $data[$numeroHazard];
echo $record['id'];
echo $record['nombase'];
echo $record['title'];
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2011, 22h34   #7
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Merci beaucoup pour ton aide
omelhor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h51.


 
 
 
 
Partenaires

Hébergement Web