JeuWeb - Crée ton jeu par navigateur
[Résolu] Souci avec un Array dans une requête - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Souci avec un Array dans une requête (/showthread.php?tid=1987)

Pages : 1 2 3


[Résolu] Souci avec un Array dans une requête - Kassak - 21-04-2008

Bonsoir, je viens de cerner un problème lors des mes requêtes, et impossible de savoir d'où cela vient, je m'explique :

Je fais souvent plusieurs requête en une, et je récupère chaque résultat grâce à un Array, voici une de mes requêtes, basique :

Code PHP :
<?
$reponse
= mysql_query('SELECT * FROM inventaire WHERE pseudo = "'.$pseudo_joueur.'" AND id_item IN(22, 24, 25)') or die(mysql_error());
while (
$donnees = mysql_fetch_assoc($reponse)){
$Array[] = $donnees['nombre'];
}
$
22 = $Array[0];
$
24 = $Array[1];
$
25 = $Array[2];

?>

Cette requête me permet donc de récupérer le nombre d'objets du joueur, pour les items 22, 24 et 25.

Depuis un moment j'ai un problème avec ce script, même si le joueur avait assez d'objet, le script considérait qu'il n'en avait pas assez. J'ai laissé passer pour y revenir un peu plus tard.
J'ai refait un système du même genre tout à l'heure, et je me suis aperçu que les Array que je récupère sont mélangés, ce qui est donc le truc qui faisait foirer le script que je vous ai montré avant. Je pensais que les Array que je récupère seraient dans l'ordre du IN(22, 24, 25), mais apparemment non.


Donc voila ma question comment savoir ce que je récupère dans les Array a la fin? Je pourrais bien évidemment changer de méthode, mais je préfère corriger celle la que de changer Wink

Merci bien Smile


RE: Souci avec un Array dans une requête - Sephi-Chan - 21-04-2008

Un ORDER BY id_item ASC peut-être.
Cela dit, c'est vrai que c'est vraiment pas une bonne méthode. Ça manque cruellement de souplesse.


Sephi-Chan


RE: Souci avec un Array dans une requête - Kassak - 21-04-2008

Non le ORDER BY ne va pas, puisque la c'est a titre d'exemple, cela peut très bien être IN(78,2,158), je cherche simplement a récupérer suivant l'ordre du IN : array[0] =78, array[1] = 2, array[2] = 158.


RE: Souci avec un Array dans une requête - naholyr - 21-04-2008

ORDER BY FIELD (item_id, 78, 2, 158)


RE: Souci avec un Array dans une requête - Sephi-Chan - 21-04-2008

Visiblement ça ne marche pas. Mais je ne vois pas ce que ça change pour toi l'ordre d'arrivée, tu peux nous expliquer qu'on t'aide à trouver un moyen ? Confused

Je te conseille quand même de revoir ton système, tu ne peux que l'améliorer. Rien que là on voit déjà une faute majeure de conception : l'utilisation du nom du joueur pour sélectionner plutôt qu'un ID. En informatique : utiliser des nombres est toujours plus pratique, d'autant que si un nom change, c'est la misère.

Enfin voilà, il faudrait que tu nous en dise plus sur ton système, car on peut être sûr que tu vas te planter en travaillant sur ce script.


Sephi-Chan, qui croyait ORDER BY FIELD spécifique à Oracle !? :O


RE: Souci avec un Array dans une requête - Kassak - 21-04-2008

Pour le pseudo au lieu de l'id, c'est un choix que j'avais fait au début, afin d'avoir une meilleur lisibilité dans la table, de savoir rapidement qui a quoi, mais je me rend compte que ça ne me sert pas, et qu'il va falloir que je change ça. Je le ferais pendant la période optimisation plutôt car ça va mettre un très gros bordel dans mes script ça^^

L'ordre d'arrivée est important, si je prend mon 1er exemple id_item IN(22, 24, 25), si le 1er array que je récupère, qui d'après moi devrait avoir comme valeur le nombre d'objet 22, contient en faites le nombre d'objet 25, cela va mettre un bon gros bordel ensuite dans mon script, vous pigez?

Autre exemple, avec la même requête :

Code PHP :
<?
$reponse
= mysql_query('SELECT nom FROM item WHERE id_item IN("'.$donnees['ingredient_1'].'","'.$donnees['ingredient_2'].'")') or die(mysql_error());
while (
$donnees_ingredient = mysql_fetch_array($reponse)){
$Array[] = $donnees_ingredient['nom'];
}

echo
'<td class="label" align="center">'.$Array[0].' et '.$Array[1].' </td>';
?>

Dans cet exemple $Array[0] contient le nom de $donnees['ingredient_2'] alors que je souhaiterais qu'il contienne le nom de $donnees['ingredient_1'] et vice versa.


Mais pourquoi dit tu que cette requête n'est pas souple? Hormis ce problème, la requête est simple, courte, et permet de récupérer ce que je veux rapidement non?


RE: Souci avec un Array dans une requête - Yoda54 - 21-04-2008

Bonjour,

Visiblement, tu récupères tous les champs de ta table, il y a donc entre autre le champ id_item, je pense donc que tu peux utiliser ce champ pour nommer ta variable et tu obtiendras ainsi le résultat désiré quelque soit l'ordre de sortie de la requête.


RE: Souci avec un Array dans une requête - Kassak - 21-04-2008

Je pige pas ce que tu me dis de faire desole xD


RE: Souci avec un Array dans une requête - Anthor - 21-04-2008

Code PHP :
<?php 
SELECT nom FROM item WHERE id_item IN
("'.$donnees['ingredient_1'].'","'.$donnees['ingredient_2'].'") ORDER BY FIELD ( id_item, "'.$donnees['ingredient_1'].'","'.$donnees['ingredient_2'].'")



RE: Souci avec un Array dans une requête - Kassak - 21-04-2008

J'avais déjà essayé ça, et apparemment la fonction FIELD ne marche pas, comme l'a dit Sephi-Chan, ou alors c'est moi qui fait vraiment nawak :

FUNCTION FIELD does not exist..