Probleme PHP basique : lister un tableau !

WRInaute occasionnel
$res_cat = send_sql($sql_cat,"trouver les catégories principales" );

while ($une_categorie = mysql_fetch_array($res_cat,MYSQL_ASSOC))
{
echo $une_categorie["cat_name"];
}

voila , ce code permet de lister sans probleme par ordre alphabetique les nom des catégories...

Ce que je voudrais, c'est qu'il liste par exemple 10 catégorie prises au hasard dans la liste total, cela vous semble t'il possible ?

merci beaucoup
 
WRInaute discret
La fonction rand(min,max) génère un nbre aléatoir compris entre le min et le max. Il faut d'abord initialiser le nbre avec srand((float) microtime()*1000000);//par exemple
$randval = rand();
Une fois généré, mysql_data_seek($requete,$randval) te place sur l'enregistrement $randval.
Tu le fais 10 fois, ou tu utilise LIMIT
 
WRInaute occasionnel
Merci j'aprecie votre aide.

Mais pouriez vous me montrer un exemple precisement ?

car je vous avoue que quand ça touche a SQL je suis un peu perdue...

et utilisé le LIMIT me semble plus propre que 10X la meme chose, ca consome les meme ressource SQL ces 2 méthodes ?

merci
 
WRInaute discret
<?php
srand((float) microtime()*1000000);
$min = 0;

$res = mysql_query("select * from nom_de_table");
$max = mysql_num_rows($res) - 11;
$randval = rand($min, $max);
$res = mysql_query("select * from nom_de_table order by nom_de_categorie asc LIMIT $randval, 10");
while($r = mysql_fetch_array($res)){
echo $r[nom ou numéro de colonne];
}
?>

Si j'ai pas fait d'erreur

Edit j'en avais fait...
 
WRInaute occasionnel
tres bien, je vais tester je vous tien au courant

surtout que ta methode va directemetn chercher la requette, et affiche pas toutes les categories, donc gain de ressource !

suite dans quelques instants...
 
WRInaute occasionnel
donc voila precisement ce que j'ai fait, avec des modification :

<?php

srand((float) microtime()*1000000);
$randval = rand(0, 200);
$res = mysql_query("SELECT id,cat_name FROM $T_categories WHERE id_cat_mere = '0' AND activation = '1' ORDER BY cat_name ASC LIMIT $randval, 10");
while($r = mysql_fetch_array($res)){
echo $r["cat_name"];
echo "<br>";
}


?>

et ça marche... enfin presque..

Ca selection les 10 données suivante apres le chiffre aleatoire... ce qui fait qu'on a un groupe de mots de meme ordre alphabetique..

j'aurais aimé que ça sois 10 données completement diférentes, et pas un block de 10...

Donc il vas faloire faire 10X la requete sql vous pensez ? qu'elle petit modif faudrais t'il faire a ce code qui est une très bonne base déja (merci DomicilePC, tu roule ta bosse en PHP)

merci
 
WRInaute occasionnel
Bon, voila, j'ai rajouter une boucle for :

srand((float) microtime()*1000000);
for ( $i=0; $i<10; $i++ ) {
$randval = rand(0, 250);
$res = mysql_query("SELECT id,cat_name FROM $T_categories WHERE id_cat_mere = '0' AND activation = '1' ORDER BY cat_name ASC LIMIT $randval, 1");
while($r = mysql_fetch_array($res)){
echo $r["cat_name"];
echo "<br>";
}

}

cela est t'il propre techniquement ?

finalement il m'a falut une rampe de lancement et je fait des prouesse en php, je suis contente :)
 
WRInaute discret
Tu n'as pas besoin du while puisque tu n'as qu'un enregistrement.
Tu peux faire directement $r = mysql_fetch_array($res)
 
WRInaute occasionnel
DomicilePC a dit:
Tu n'as pas besoin du while puisque tu n'as qu'un enregistrement.
Tu peux faire directement $r = mysql_fetch_array($res)


nan mais je m'était tromper je met bien 10 pas 1 :)

merci alors, biscuit aussi :)
 
WRInaute occasionnel
ha oui je voulais savoir, y a vraiment pas un moyen d'etre sur que ça ne s'affiche pas 2X dans les 10 une donnée ?

Si j'ai pas de soluce a ça j'insiste pas, vous m'avez deja très bien aidé :)

merci
 
WRInaute discret
Je comprends pas bien:
Si tu as 2 fois le même nom qui te sort dans ta requête, c'est qu'il y a un doublon dans ta table.
 
WRInaute occasionnel
DomicilePC non, tous simplement que c'est tomber 2X dessuite sur le meme nombre aléatoire... donc forcement 2X la meme catégorie qui s'affiche.

Comprend tu ?

peu etre en mettant de coté les chiffres deja sortie et les comparant au nouveaux...

Tu es formidable :oops:
 
WRInaute discret
Je pense pas qu'un chiffre aléatoire ne te ressorte comme ça.
Si ça t'arrive, va vite faire un loto, t'as des chances de gagner.

Si non, tu peux placer ton chiffre dans un tableau, et ensuite parser le tableau pour voir si le nouveau nombre est présent.

Mais franchement, t'as plus de chance au loto...
 
WRInaute occasionnel
DomicilePC tu a raison je vais augmenter le nombre d'entrés, et les probabilité reprendrons le dessus, je vais pas chercher plus loin :)

Merci de ta disponibilité, et très bonne nuit a toi ;)
 
Nouveau WRInaute
Au contraire, DISTINCT s'occupe du tri des résultats pour ne jamais renvoyer la même ligne, quellle que soit ta requête SQL (mysql cherchera des lignes différentes tant qu'il ne sera pas arrivé au LIMIT que tu as défini).

Par contre si tu as des lignes différentes qui ont un nom de catégorie commun, il ne faut pas oublier de demander des résultats distincts pour ce champ.

Ainsi la requête propre pour faire ce que tu veux devrait ressembler à

Code:
SELECT DISTINCT(cat_name) * FROM nom_de_ta_table ORDER BY RAND() LIMIT 10;
 
Discussions similaires
Haut