choisir au hasard un enregistrement quand...

Mammouth du PHP | 555 Messages

11 nov. 2005, 16:38

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!!!!
A+ et bon surf!!!!

Mammouth du PHP | 19672 Messages

11 nov. 2005, 20:10

ORDER BY RAND() sauf erreur de ma part
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 555 Messages

11 nov. 2005, 20:12

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
A+ et bon surf!!!!

Mammouth du PHP | 555 Messages

11 nov. 2005, 20:25

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>';
?>
A+ et bon surf!!!!

Mammouth du PHP | 19672 Messages

11 nov. 2005, 20:28

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()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 555 Messages

11 nov. 2005, 20:31

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>';
?>
A+ et bon surf!!!!

Mammouth du PHP | 555 Messages

11 nov. 2005, 20:33

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
A+ et bon surf!!!!

Mammouth du PHP | 1311 Messages

11 nov. 2005, 22:31

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)"

Mammouth du PHP | 555 Messages

11 nov. 2005, 22:34

hum ok je vais essayer ca et je vous donne la réponse merci
A+ et bon surf!!!!

Mammouth du PHP | 555 Messages

11 nov. 2005, 22:41

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
A+ et bon surf!!!!

Mammouth du PHP | 555 Messages

12 nov. 2005, 23:39

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)"
A+ et bon surf!!!!

Mammouth du PHP | 555 Messages

12 nov. 2005, 23:44

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?
A+ et bon surf!!!!

Mammouth du PHP | 1885 Messages

12 nov. 2005, 23:49

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.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Mammouth du PHP | 555 Messages

12 nov. 2005, 23:52

non toujours aucun résultat sans la fonction rand...
A+ et bon surf!!!!

Mammouth du PHP | 555 Messages

12 nov. 2005, 23:56

a désolé le paramètre seulement attend je refait le test...
A+ et bon surf!!!!