Page 1 sur 2

choisir au hasard un enregistrement quand...

Posté : 11 nov. 2005, 16:38
par cicom
Bonjour à tous
J'ai encore une fois besoin de votre aide
Voila je décri la situation. J'ai une table qui contient comme champ id et pseudo (table ban) et une autre qui contient pseudo et points (table users). Je voudrai une syntaxe SQL qui permette de choisir un id au hasard dans la table ban quand les points de la table users su pseudo correspondant au pseudo de cet id au hasard sont supérieurs à 0. Est ce possible? (j'y ai déjà laissé quelques cheveux...)
Merci de votre aide (et de vos cheveux éventuels ^^)
a+ et bon surf!!!!

Posté : 11 nov. 2005, 20:10
par Cyrano
ORDER BY RAND() sauf erreur de ma part

Posté : 11 nov. 2005, 20:12
par cicom
euh oui mais là il en manque un sacré bout...^^
en fait j'ai tout mais c'est le fait qu'il doive prend un enregistrement au hasard quand le pseudo équivlament dans l'autre table est au dessus de 0 qui me gène

Posté : 11 nov. 2005, 20:25
par cicom
voila si ça peut vous aider à comprendre ce que je veux faire voila ce que j'ai bricolé. Ni php ni SQL ne me renvoient d'erreurs mais ils n'affichent pas le bon résultat à la fin...
<?php
include ('scripts.php');
$pseudo = $_GET['pseudo'];
$sql1 = mysql_query("SELECT b.pseudo, b.url, b.iurl, b.alt, u.points FROM users AS u, ban AS b WHERE u.points > 0 AND b.pseudo <> '".$pseudo."' ORDER BY RAND() LIMIT 0, 1") or die(mysql_error());
$sql2 = mysql_fetch_array($sql1);
echo '<a href="'.$sql2[b.url].'" target="_new"><img src="'.$sql2[b.iurl].'" alt="'.$sql2[b.alt].'"></a>';
?>

Posté : 11 nov. 2005, 20:28
par Cyrano
Ben tu fais ta jointure normale qui va récupérer une liste correspondant à tes critères de tri: la clause ORDER BY n'arrive qu'en fin de requête, donc quand tout est déjà sélectionné. Si tu rajoutes en plus une clause LIMIT pour n'avoir qu'une partie des lignes, tu n'auras pas deux fois le même résultat pour la même requête.

Je ne sais pas si c'est bien clair mon explication: comment dire, fais abstraction de l'ordre aléatoire de tri en début de requête et ne t'occupe que de la condition de jointure et après seulement tu fais intervenir RAND()

Posté : 11 nov. 2005, 20:31
par cicom
ah d'accord je croit avoir compris en fait il faut mettre ca? je vais tester et je revient
<?php
include ('scripts.php');
$pseudo = $_GET['pseudo'];
$sql1 = mysql_query("SELECT b.pseudo, b.url, b.iurl, b.alt, u.points FROM users AS u, ban AS b ORDER BY RAND() WHERE u.points > 0 AND b.pseudo <> '".$pseudo."'") or die(mysql_error());
$sql2 = mysql_fetch_array($sql1);
echo '<a href="'.$sql2[b.url].'" target="_new"><img src="'.$sql2[b.iurl].'" alt="'.$sql2[b.alt].'"></a>';
?>

Posté : 11 nov. 2005, 20:33
par cicom
a euh noon il a pas vraiment aimé ça You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE u.points > 0 AND b.pseudo <> ''' at line 1

Posté : 11 nov. 2005, 22:31
par jeff
salut
c'est normale que tu est une erreur
quand tu fait une requete tu doit respecter un certaine ordre
order by est apres where(having,..)
"SELECT b.pseudo, b.url, b.iurl, b.alt, u.points FROM users AS u, ban AS b  WHERE u.points > 0 AND b.pseudo <> '".$pseudo."' ORDER BY RAND(b.id)"

Posté : 11 nov. 2005, 22:34
par cicom
hum ok je vais essayer ca et je vous donne la réponse merci

Posté : 11 nov. 2005, 22:41
par cicom
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE u.points > 0 AND b.pseudo <> ''' at line 1... avec ta syntaxe

Posté : 12 nov. 2005, 23:39
par cicom
déjà il y a une erreur que j'ai trouvée, je la corrige ici et je part la tester pour vous en donner des nouvelles. Voici le script ci dessus(dans le message de jeff) mais corrigé
"SELECT b.pseudo, b.url, b.iurl, b.alt, u.points FROM users AS u, ban AS b  WHERE u.points > 0 AND b.pseudo <> '".$pseudo."' AND b.pseudo = u.pseudo ORDER BY RAND(b.id)"

Posté : 12 nov. 2005, 23:44
par cicom
cette erreur corrigé, je n'ai plus d'erreur SQL mais il ne me sort toujours aucun résultat, quelqu'un pourrait il m'aider?

Posté : 12 nov. 2005, 23:49
par Xenon_54
La fonction RAND() de SQL ne prend aucun paramètre. Retire le paramètre afin de vérifier s'il s'agissait bien de l'erreur.

Posté : 12 nov. 2005, 23:52
par cicom
non toujours aucun résultat sans la fonction rand...

Posté : 12 nov. 2005, 23:56
par cicom
a désolé le paramètre seulement attend je refait le test...