Affichage aléatoire

Eléphant du PHP | 440 Messages

19 janv. 2007, 18:55

Bonjour,

sur le sujet, j'ai trouvé des posts concernant les images mais rien sur les textes, en tout cas rien qui me conviennent.

J'ai ce code
 $sql = "SELECT * FROM " . $table." WHERE VALID=1 ORDER BY societe" ; 
qui me fait un affichage par ordre alphabétique de tout ce que je souhaite.
J'aimerais que l'affichage se fasse de façon aléatoire. Il semble qu'il faille placer un RAND() dans le code, mais je ne sais trop comment.
J'ai essayé derriere ORDER BY et ça ne va pas. J'ai essayé aussi RAND(now()) (j'ai trouvé ça quelque part), ça ne va pas non plus.

Donc ... à l'aide !! :cry:
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
ViPHP | 1961 Messages

19 janv. 2007, 19:15

Bonjour,
Quand tu dis, "ça ne vas pas ", que veux tu dire par là ?
Moi si je fais un "ORDER BY RAND()" ça marche

Code : Tout sélectionner

mysql> SELECT * FROM articles ORDER BY RAND(); +-------------+-------------+---------------------------+-------+-------+ | codeArticle | idCategorie | nom | prix | stock | +-------------+-------------+---------------------------+-------+-------+ | RAQ01 | 2 | Raquette de squash | 62.00 | 3 | | BAL45 | 2 | Balle de squash débutant | 5.00 | 35 | | SHR03 | 3 | Short court | 17.50 | 1 | | BOU89 | 1 | Bouchon rond | 43.00 | 2 | | CAP01 | 1 | Canne à pêche | 80.40 | 4 | +-------------+-------------+---------------------------+-------+-------+ 5 rows in set (0.00 sec) mysql> SELECT * FROM articles ORDER BY RAND(); +-------------+-------------+---------------------------+-------+-------+ | codeArticle | idCategorie | nom | prix | stock | +-------------+-------------+---------------------------+-------+-------+ | BAL45 | 2 | Balle de squash débutant | 5.00 | 35 | | CAP01 | 1 | Canne à pêche | 80.40 | 4 | | SHR03 | 3 | Short court | 17.50 | 1 | | RAQ01 | 2 | Raquette de squash | 62.00 | 3 | | BOU89 | 1 | Bouchon rond | 43.00 | 2 | +-------------+-------------+---------------------------+-------+-------+ 5 rows in set (0.00 sec)
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 440 Messages

19 janv. 2007, 19:25

si mon code se finit par ORDER BY RAND() societe";
j'obtiens un message d'erreur.

Faut-il mettre seulement ORDER BY RAND() ; ??
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
ViPHP | 1961 Messages

19 janv. 2007, 19:29

Re,
Dans ce cas tu dois lui donner à comprendre en séparant les critères avec des virgules, Exp.

Code : Tout sélectionner

... ORDER BY societe, RAND()";
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 440 Messages

19 janv. 2007, 19:59

$sql = "SELECT * FROM " . $table." WHERE VALID=1 ORDER BY societe, RAND() "; 
    $res = mysql_query($sql); 
    $nb = mysql_num_rows($res);
j'ai testé et le message me dit qu'il y a une erreur ligne 195, soit 2 plus bas. Est-ce ça pourrait venir de l'une ou l'autre de ces lignes ?

J'ai testé aussi sans la virgule, au cas où. C'est pareil.
Débutant complet en php/mysql. Merci pour votre aide.

Eléphant du PHP | 440 Messages

19 janv. 2007, 20:01

en fait il y avait un espace de trop entre la dernière ) et les "

La page s'affiche mais toujours dans le même ordre !
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
ViPHP | 1961 Messages

19 janv. 2007, 20:05

Re,
Deux choses :
1 - Il faut toujours tester le retour des fonctions, et en particulier celles de MySQL
if(false === ($res = mysql_query($sql))) {
   die('ERR_SQL :<br />' . $sql . '<br />' . mysql_error());
}
2 - Quand tu as un message d'erreur, poste-le. On ne peut pas le deviner.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 440 Messages

19 janv. 2007, 20:57

en l'occurrence il n'y a plus de message d'erreur sur ce code
$sql = "SELECT * FROM " . $table." WHERE VALID=1 ORDER BY societe, RAND()";  
Mais ça ne change rien à l'affichage. Il n'est pas aléatoire.
Débutant complet en php/mysql. Merci pour votre aide.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

19 janv. 2007, 20:59

Normal puisque le tri se fait d'abord sur la société
et ensuite - donc seulement en cas d'égalité - sur un champ pris au hasard.

Il vaut donc mieux simplifier en
$sql = "SELECT * FROM ".$table." WHERE valid=1 ORDER BY rand()"; 
Et, pour la énième fois :
Nommez les champs que vous voulez sélectionner au lieu d'utiliser un SELECT *

Eléphant du PHP | 440 Messages

19 janv. 2007, 21:13

effectivement c'est beaucoup mieux. Merci à vous 2 pour vos contributions.
Débutant complet en php/mysql. Merci pour votre aide.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

19 janv. 2007, 21:31

À noter que la solution que je t'ai indiquée (et qui fonctionne)
était la toute première que t'avait conseillée Ajoloca. ;)

Eléphant du PHP | 440 Messages

19 janv. 2007, 22:15

c'est vrai mais j'avais le nom d'un champ (societe) dont je ne savais pas quoi faire. Et je ne me doutais pas qu'il fallait l'enlever !

Pour revenir sur ta remarque
Et, pour la énième fois :
Nommez les champs que vous voulez sélectionner au lieu d'utiliser un SELECT *
il faut faire quoi en fait ? SELECT societe TABLE au lieu de SELECT * TABLE par exemple ?
Débutant complet en php/mysql. Merci pour votre aide.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

20 janv. 2007, 00:52

La bonne syntaxe est :

Code : Tout sélectionner

SELECT champ_1, champ_2,... , champ_n FROM table ...