posté le 10-05-2005 à 16:32:03
soucis mysql ^^
comme ca faisait longtemps que j'avais pas eut de soucis avec mon site, il fallait bien que ca arrive (oui, j'ai une notion assez pessimiste de l'occurence des imponderables ^^)
donc : mon but est de selectionner au hasard dans une table qui sera au final assez grande une ligne, et de l'afficher ...
pour l'instant, je fais un
$result=mysql_query("SELECT * FROM trucs");
$num=mysql_numrows($result);
$i=rand(0,$num);
et ensuite, j'hesite a faire un mysql_result($result,$i,"astuce");
ou un $result=mysql_query("SELECT * FROM trucs WHERE numero=$i");
mais tout ca me semble assez barbare ...
n'y aurait il pas une autre solution ???
Commentaires
lol non ms c'est vrai quoi attends, franchement les gens de nos jours qui se croient tout permis! pffff
grave, à ta place je l'aurai mal pris!!! lo
bon légo tu arrêtes de me paraphraser un peu
Access, c'est réputé être une base de donnée ? le monde a bien changé alors ... ;p
trève de blagues, déjà pour connaitre le nombre de lignes dans une table le mieux (et le plus rapide) est de faire :
select cound(id) from table; (à condition bien sûr que la colonne id est là, ce qui est le cas pour toutes mes tables), ou sinon au moins sous mysql :
select count(*) from table; mais vous verrez par la suite que on en a peut-être pas besoin.
La méthode where numero=$i, elle ne marche que si tu es sûr que il y a tous les $i entiers entre 1 et $num dans ta table, ce qui n'est pas le cas d'un auto_increment quand tu effaces des lignes par la suite. Ca veut dire qu'il faut créer une colonne spéciale dans ta base pour ca, et la gérer à chaque création/effacement de ligne.
Je ne vois pas en quoi cette méthode en deux temps pourrait être intéressante, sauf si la requete pour trouver une ligne aléatoire a lieu très souvent, et celles pour créer/effacer une ligne très rarement. Et encore.
Bon, j'arrete de vous faire baver, voici la formul magique qui conviendra à ton cas, à utiliser sans modération jusqu'à au moins 100 000 entrées : sur la table des commentaires de vefblog, avec 13 000 entrées, la requete ne prend que 0.06s la premiere fois et 0.02s les suivantes ( avec la mise en cache de la mémoire)
tadam voici la formule magique :
select * from trucs order by rand() limit 1
maintenant, si le nombre d'entrées se compte plutot en millions, je ne sais pas trop ce serait intéressnt de demander à un expert ou sur les forums spécialisés. Je pense qu'une solution serait de créer une table temporaire avec la meme formule mais un limit de l'ordre de 1000 par exemple, avec des id à prendre dans l'ordre jusqu'à épuisement de cette table. ce qui est une manière de tricher.
Sinon, à vue d'oeil, ça me semble correct, mais je choisirai plutôt le :
$result=mysql_query("SELECT * FROM trucs WHERE numero=$i"); à la fin.
En même temps, je ne fais que des requêtes SQL sous Access en TP de BD, on ne fait pas de page en PHP, donc je ne connais pas toutes les commandes PHP. :(
J'te ferai ça en TP de SQL demain matin.
alors si l'on prend en compte d'une part qu'il fait assez beau dehors, mais d'autre part qu'il y a une petite brise tout de même, la seule solution que j'aurai à te proposer serait de vite éteindre ton ordinateur, prendre une ptite veste et aller te rafraichir les idées dehors, en profitant de ce beau soleil
bon et bien ds ce cas il ne te reste plus K attendre super légo, et ses théories surement plus approfondies que les miennes qui ne servent à rien
si... arrêter de dmander à papa légo de faire tes devoirs