choisir au hasard un enregistrement quand...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : choisir au hasard un enregistrement quand...

par cicom » 13 nov. 2005, 00:00

hum pour info je n'ai jamais mis de quotes pour les vraibles sql (ex $sql2[alt] marche très bien sans les quotes) Mais sinon l'erreur venait de l'allias, merci t'es un génie. Je met donc résolu. Pour ceux que ça interesse je bosse sur la V2 de mon projet http://www.get-surf.com (pour l'instant seule la V1 est en ligne)

par Xenon_54 » 12 nov. 2005, 23:57

non toujours aucun résultat sans la fonction rand...
Je n'ai pas dit de retirer la fonction RAND().

Cependant, je constate que la manière dont tu récupères tes résultats n'est pas correct.
echo '<a href="'.$sql2[b.url].'" target="_new"><img src="'.$sql2[b.iurl].'" alt="'.$sql2[b.alt].'"></a>';
Il faut:
1) Entrer les noms de champs par des single-quotes: des '
2) Il faut utiliser directement le nom des champs et non utiliser l'alias de la table et le nom du champ. Ainsi "b.alt" devient "alt".

;)

par cicom » 12 nov. 2005, 23:57

non toujours aucun résultat sans le paramètre.

par cicom » 12 nov. 2005, 23:56

a désolé le paramètre seulement attend je refait le test...

par cicom » 12 nov. 2005, 23:52

non toujours aucun résultat sans la fonction rand...

par Xenon_54 » 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.

par cicom » 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?

par cicom » 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)"

par cicom » 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

par cicom » 11 nov. 2005, 22:34

hum ok je vais essayer ca et je vous donne la réponse merci

par jeff » 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)"

par cicom » 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

par cicom » 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>';
?>

par Cyrano » 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()

par cicom » 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>';
?>