Pobleme avec ORDER BY RAND () sur la table
jbquentin
Messages postés
120
Date d'inscription
Statut
Membre
Dernière intervention
-
jbquentin Messages postés 120 Date d'inscription Statut Membre Dernière intervention -
jbquentin Messages postés 120 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai utiliser la fonction INSERT INTO pour mettre un objet avec l'id de l'objet, .... dans une table , et dans cette fonction elle utilise ORDER BY RAND, a cheque fois qu'un objet est choisi, il s'inscrit mal dans la base de donnés..
code :
Ce qui m'affiche dans la base de donnés :
id_inventaire | objet | id_items | id (membre)
-----------------|-------------------------|-------------|-----------------
1 | Ressource id#13 | 1 | 1
2 | Ressource id#13 | 1 | 1
3 | Ressource id#13 | 1 | 1
4 | Ressource id#13 | 1 | 1
-----------------------------------------------------------------------------
D'ailleurs, le RAND tombe tous le temps sur l'id_items 1 alors qu'il y en as 2 ...
Merci,
J'ai utiliser la fonction INSERT INTO pour mettre un objet avec l'id de l'objet, .... dans une table , et dans cette fonction elle utilise ORDER BY RAND, a cheque fois qu'un objet est choisi, il s'inscrit mal dans la base de donnés..
code :
$sql = "SELECT * FROM items ORDER BY RAND( ) LIMIT 1" ; $req = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $objet_drop = $req; $id_membre = $id; $sql = " INSERT INTO 'inventaire' ('id_inventaire', 'objet', 'id_items', 'id' ) VALUES ('', '$objet_drop', '$id_items', '$id_membre' ) "; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $drop = $req;
Ce qui m'affiche dans la base de donnés :
id_inventaire | objet | id_items | id (membre)
-----------------|-------------------------|-------------|-----------------
1 | Ressource id#13 | 1 | 1
2 | Ressource id#13 | 1 | 1
3 | Ressource id#13 | 1 | 1
4 | Ressource id#13 | 1 | 1
-----------------------------------------------------------------------------
D'ailleurs, le RAND tombe tous le temps sur l'id_items 1 alors qu'il y en as 2 ...
Merci,
A voir également:
- Pobleme avec ORDER BY RAND () sur la table
- Table ascii - Guide
- Table des matières word - Guide
- Photos liked by ne fonctionne plus ✓ - Forum Facebook
- Table des caractères - Guide
- Table des figures google doc ✓ - Forum Word
12 réponses
Bonjour
Il te manque une étape essentielle dans ton traitement. Après le mysql_query, il n'y a aucun fetch (mysql_fetch_array ou autre) donc tu ne récupères aucun résultat de ta requête. Tout ce que tu récupères dans $req, c'est le résultat du query, qui est une ressource et non pas un objet. Quand tu essayes de l'insérer dans la base, php le remplace par "Resource id#13" (le id# change selon le script).
D'ailleurs, tu ne pourrais pas non plus insérer un objet (si c'en était un) directement dans la base comme ça : le mieux est d'insérer les différents composants de l'objet dans différents champs, ou de le sérialiser.
Ensuite, les valeurs que tu insères ($id_membre=$id et $id_items) ne sont pas initialisées. Je suppose qu'elles correspondent à des champs de ta table, mais il n'y a a priori aucun rapport entre une variable PHP et un champ de table mysql ! PHP ne va pas deviner que quand tu écris $id (variable php) tu parles du champ id d'une table.
Si j'ai bien compris, tu aurais donc dû écrire ça :
Il te manque une étape essentielle dans ton traitement. Après le mysql_query, il n'y a aucun fetch (mysql_fetch_array ou autre) donc tu ne récupères aucun résultat de ta requête. Tout ce que tu récupères dans $req, c'est le résultat du query, qui est une ressource et non pas un objet. Quand tu essayes de l'insérer dans la base, php le remplace par "Resource id#13" (le id# change selon le script).
D'ailleurs, tu ne pourrais pas non plus insérer un objet (si c'en était un) directement dans la base comme ça : le mieux est d'insérer les différents composants de l'objet dans différents champs, ou de le sérialiser.
Ensuite, les valeurs que tu insères ($id_membre=$id et $id_items) ne sont pas initialisées. Je suppose qu'elles correspondent à des champs de ta table, mais il n'y a a priori aucun rapport entre une variable PHP et un champ de table mysql ! PHP ne va pas deviner que quand tu écris $id (variable php) tu parles du champ id d'une table.
Si j'ai bien compris, tu aurais donc dû écrire ça :
$sql = "SELECT * FROM items ORDER BY RAND( ) LIMIT 1" ; $req = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $ligne = mysql_fetch_assoc($req); // je suppose qu'il y a une réponse, et une seule $objet_drop = serialize($ligne); // attention, unserialize pour récupérer la valeur $id_membre = $ligne['id']; $id_items = $ligne['id_items']; $sql = " INSERT INTO 'inventaire' ('id_inventaire', 'objet', 'id_items', 'id' ) VALUES ('', '$objet_drop', '$id_items', '$id_membre' ) "; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $drop = $req;
Merci pour votre réponse, sauf que sa ne marche toujours pas :/
Pour t'expliquer ce que je veut faire, en fait je veut prendre un objet (objet +id_items ) au hasard de la table "items" et je veut mettre ces donnés dans la classe inventaire ou il y aura ces infos + l'id du joueur qui les as ramassés.
Voila,
Si je trouve une solution je te contacte ;)
Pour t'expliquer ce que je veut faire, en fait je veut prendre un objet (objet +id_items ) au hasard de la table "items" et je veut mettre ces donnés dans la classe inventaire ou il y aura ces infos + l'id du joueur qui les as ramassés.
Voila,
Si je trouve une solution je te contacte ;)
Merci pour votre réponse, sauf que sa ne marche toujours pas
Si tu as copié-collé ce que je t'ai mis et que ça ne marche pas du premier coup, c'est normal.
Il est tout à fait possible qu'il reste des erreurs de syntaxe, mais ton principe peut fonctionner (même si ce n'est pas le meilleur possible) avec les corrections que je t'ai indiquées.
Si tu n'as pas tout compris de ce que j'ai écrit (ce qui serait normal aussi), n'hésite pas à poser une question sur un point ou un autre.
Si je trouve une solution je te contacte. Inutile de me contacter personnellement. Si c'est pour une question, le forum est là pour ça, et si c'est pour me donner la solution, j'ai toujours réussi à faire ce que je voulais jusqu'à aujourd'hui ;)
Si tu as copié-collé ce que je t'ai mis et que ça ne marche pas du premier coup, c'est normal.
Il est tout à fait possible qu'il reste des erreurs de syntaxe, mais ton principe peut fonctionner (même si ce n'est pas le meilleur possible) avec les corrections que je t'ai indiquées.
Si tu n'as pas tout compris de ce que j'ai écrit (ce qui serait normal aussi), n'hésite pas à poser une question sur un point ou un autre.
Si je trouve une solution je te contacte. Inutile de me contacter personnellement. Si c'est pour une question, le forum est là pour ça, et si c'est pour me donner la solution, j'ai toujours réussi à faire ce que je voulais jusqu'à aujourd'hui ;)
En fait ce que je comprend pas c'est le $id_membre = $ligne['id']
Donc a la place du ligne, j'ai mit $data_accounts['id'] pour recuperer l'id du membre qui recupere l'objet,
Donc a la place du ligne, j'ai mit $data_accounts['id'] pour recuperer l'id du membre qui recupere l'objet,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'avais supposé, comme je l'avais écrit, que $id correspondait en fait au champ id de la table que tu venais de lire. Dans ce cas, comme on récupère la valeur de ce champ dans $ligne['id'], il était normal de remplacer ta ligne $id_membre = $id par $id_membre = $ligne['id'].
Je dis bien j'avais supposé, car on ne sait pas d'où viennent tes variables avec le peu de code que tu montres.
Mais c'est toi qui sait d'où elles viennent ; si tu as de bonnes raisons de croire que la bonne valeur pour $id_membre doit prendre la valeur de $data_accounts['id'], tu es mieux placé que moi pour le savoir, surtout que je n'ai pas les moyens de savoir ce qu'est ton $data_accounts.
Je dis bien j'avais supposé, car on ne sait pas d'où viennent tes variables avec le peu de code que tu montres.
Mais c'est toi qui sait d'où elles viennent ; si tu as de bonnes raisons de croire que la bonne valeur pour $id_membre doit prendre la valeur de $data_accounts['id'], tu es mieux placé que moi pour le savoir, surtout que je n'ai pas les moyens de savoir ce qu'est ton $data_accounts.
Okay :)
Donc comme en fait il y avait plsuieur réponse pour mysql_fetch_assoc j'ai mit sa
requires.php
Mais rien ne s'affiche sur toute les pages qui ont include(requires.php) donc il doit y avoir des problèmes de syntaxe mais je ne trouve pas lesquelles :/
Donc comme en fait il y avait plsuieur réponse pour mysql_fetch_assoc j'ai mit sa
requires.php
$sql = "SELECT * FROM items ORDER BY RAND( ) LIMIT 1" ; $req = mysql_query($sql) or die($requete.' '.mysql_error()); $ligne = ($row = mysql_fetch_assoc($req)){ echo $row["id_items"]; echo $row["objet"]; } // je suppose qu'il y a une réponse, et une seule $objet_drop = serialize($ligne); // attention, unserialize pour récupérer la valeur $id_membre = $data_accounts['id']; $id_items = $ligne['id_items']; $sql = " INSERT INTO 'inventaire' ('id_inventaire', 'objet', 'id_items', 'id' ) VALUES ('', '$objet_drop', '$id_items', '$id_membre' ) "; $req = mysql_query($sql) or die($requete.' '.mysql_error()); $drop = $req;
Mais rien ne s'affiche sur toute les pages qui ont include(requires.php) donc il doit y avoir des problèmes de syntaxe mais je ne trouve pas lesquelles :/
J'ai l'impression que tu veux aller plus vite que la musique. Tu écris des choses que visiblement tu ne comprends pas :
$req = mysql_query($sql) or die($requete.' '.mysql_error());
Puisque ta requête est $sql, pourquoi avoir mis $requete dans le die ?
$ligne = ($row = mysql_fetch_assoc($req)){
As-tu une idée de ce que fait cette ligne ? Il n'y a aucun intérêt (ou alors explique moi...) à mettre le résultat dans $row et $ligne. Il n'y a aucun intérêt non plus à encadrer les deux echo suivant d'accolades, surtout si on oublie le point-virgule à la fin de l'instruction précédente.
Enfin, je t'ai donné une mauvais indication car j'avais cru au départ que tu parlais d'objet au sens informatique. Je vois qu'il s'agit en fait d'un champ comme un autre, donc oublie le serialize :
$req = mysql_query($sql) or die($requete.' '.mysql_error());
Puisque ta requête est $sql, pourquoi avoir mis $requete dans le die ?
$ligne = ($row = mysql_fetch_assoc($req)){
As-tu une idée de ce que fait cette ligne ? Il n'y a aucun intérêt (ou alors explique moi...) à mettre le résultat dans $row et $ligne. Il n'y a aucun intérêt non plus à encadrer les deux echo suivant d'accolades, surtout si on oublie le point-virgule à la fin de l'instruction précédente.
Enfin, je t'ai donné une mauvais indication car j'avais cru au départ que tu parlais d'objet au sens informatique. Je vois qu'il s'agit en fait d'un champ comme un autre, donc oublie le serialize :
$objet_drop = $ligne['objet'];
En fait pour les echo je l'ait ais mit car je doit selectionner plusieurs champs dans la table, donc la j'ai corriger en mettant :
while ($row = mysql_fetch_assoc($req))or die(mysql_error()) { echo $row["id_items"]; echo $row["objet"]; }
while ($row = mysql_fetch_assoc($req))or die(mysql_error()) { ce qui n'a pas grand rapport avec la version précédente $ligne = ($row = mysql_fetch_assoc($req)){
C'est très bien, maintenant tu dois afficher des objets et leurs id, sans espaces ni passages à la ligne... Tu n'as plus qu'à mettre ton INSERT dans cette boucle, et sans doute supprimer l'affichage qui te sert juste de vérification tel q'il est.
C'est très bien, maintenant tu dois afficher des objets et leurs id, sans espaces ni passages à la ligne... Tu n'as plus qu'à mettre ton INSERT dans cette boucle, et sans doute supprimer l'affichage qui te sert juste de vérification tel q'il est.
La je ne comprend pas tres bien.. :/
Pour afficher les objets et leurs id c'est le SELECT id_items, objet FROM items ....... ?
Et j'insère comme ca ?
Pour afficher les objets et leurs id c'est le SELECT id_items, objet FROM items ....... ?
Et j'insère comme ca ?
while ($row = mysql_fetch_assoc($req))or die(.' '.mysql_error()); { echo $row["id_items"]; echo $row["objet"]; $sql = " INSERT INTO 'inventaire' ('id_inventaire', 'objet', 'id_items', 'id' ) VALUES ('', 'objet', 'id_items', '$id_membre' ) "; $req = mysql_query($sql) or die(.' '.mysql_error()); } $drop = $req; }
Tu devrais commencer par apprendre les bases avant de te lancer dans des choses un peu plus compliquées...
Si tu écris (je ne recopie pas tout) VALUES ('', 'objet', 'id_items', ça va insérer le mot 'objet' et le mot 'id_items' dans ta base. Il faut remplacer ces mots par leurs valeurs en mettant une variable.
Si tu écris (je ne recopie pas tout) VALUES ('', 'objet', 'id_items', ça va insérer le mot 'objet' et le mot 'id_items' dans ta base. Il faut remplacer ces mots par leurs valeurs en mettant une variable.
echo $row["id_items"]; $id_items=$row["id_items"]; echo $row["objet"]; $objet= $row["objet"]; $sql = " INSERT INTO 'inventaire' ('id_inventaire', 'objet', 'id_items', 'id' ) VALUES ('', '$objet', '$id_items', '$id_membre' ) "; $req = mysql_query($sql) or die(.' '.mysql_error()); }
ah oui dsl je croyait que tu parlait de la fonction SELECT
Sinon, voila ou j'en suis avec mon code
Sinon, voila ou j'en suis avec mon code
$id_membre = $data_accounts['id']; $sql = "SELECT id_items, objet FROM items ORDER BY RAND( ) LIMIT 1" ; $req = mysql_query($sql); while ($row = mysql_fetch_assoc($req))or die(.' '.mysql_error()) { echo $row["id_items"]; $id_items = $row["id_items"]; echo $row["objet"]; $objet = $row["objet"]; $sql = " INSERT INTO 'inventaire' ('id_inventaire', 'objet', 'id_items', 'id' ) VALUES ('', '$objet', '$id_items', '$id_membre' ) "; $req = mysql_query($sql) or die(.' '.mysql_error()); $drop = $req; }