Récupérer des données sur une clé double

Récupérer des données sur une clé double - PHP - Programmation

Marsh Posté le 29-01-2009 à 15:42:24    

Bonjour,
 
J'ai un soucis pour récupérer mes données d'une table qui est constituée d'une double clé. En gros, nous pourrions prendre comme exemple que nous avons un type d'ampoule qui aurait une puissance. Ainsi, une ampoule serait définie par son type ainsi que sa puissance. Ces deux champs formeraient donc la clé primaire qui suffirait à définir nos besoins, à savoir une ampoule.
 
J'ai une méthode qui est la suivante:


public function selectLines($champs, $table, $condition){
     $requeteSQL = 'SELECT ' . $champs . ' FROM ' . $table . ' ' . $condition;
     // Affichage de la requête pour les tests
     //echo '<br />' . $requeteSQL . '<br />';
        $resultatRequete = array();
        $ressource = mysql_query($requeteSQL);
        $i=0;
        while ($row = mysql_fetch_array($ressource)){
         $resultatRequete[$i] = $row[0];
         $i++;
  }
  return $resultatRequete;
}


Et une autre pour ne faire la recherche que sur un seul champ qui est:
 


public function selectTypeSourceSimple($typeSourceLum){
     $typeSource = new TypeSource();
     
     // Données pour le type de source
     $resultats = $this->selectRow('*','type_source','WHERE type_source_lum LIKE "%' . $typeSourceLum . '%"');
     $typeSource->setTypeSource($resultats[0]);
     $typeSource->setPuissance($resultats[1]);
     $typeSource->setDureeVie($resultats[2]);
     return $typeSource;
}


 
Et lors de l'appel, je fais:


$resultats = $db->selectLines('*','type_source','WHERE type_source.type_source_lum LIKE "%' . $valeur . '%"');
 for ($i=0; $i<sizeof($resultats);$i++){
  $typeSource = $db->selectTypeSourceSimple($resultats[$i]);
  $typeSource->afficher();
 }


 
J'ai testé avec l'affichage de la requete et ai rentré celui-ci dans phpMyAdmin. Ce dernier me retourne bien le résultat escompté. Par contre, lors de l'affichage dans ma page, il me trouve bien X-entrées (le nombre juste) mais il me retourne toujours la même valeur pour la deuxième clé.
Ainsi, si nous avons un type d'ampoule Sodium avec des puissances de 10, 20, 30, 40 et 50 [W] (pour l'exemple), il me retournera bien 5 valeurs mais ce sera 5 ampoules de sodium à 10 [W].
 
Quelqu'un aurait-il une idée???  
 
Merci à ceux qui voudront bien aider un débutant comme moi...
 
P.S. Je pense qu'il y a bien plus facile à faire, autant pour la base de données que pour le code. En ce qui concerne la BDD, j'aimerais bien garder la structure de la clé-double par contre, au niveau du code, je suis ouvert à toute proposition.
P.S.2: Inutile de faire des commentaires qui n'apportent rien à mon problème... Je suis débutant et vous êtes certainement passés par là   ;)  ;)  ;)


Message édité par moaaaaa le 30-01-2009 à 08:29:52
Reply

Marsh Posté le 29-01-2009 à 15:42:24   

Reply

Marsh Posté le 29-01-2009 à 16:37:37    

Si je comprends bien, tu fais une requête générale qui te retourne toutes les données dont t'as besoin.
Ensuite pour chaque ligne récupéré tu fais une autre requête qui est censé te retourner la même chose et ce en indiquant qu'un seul élément de ta clé primaire comme condition.
 
Dans ces conditions, vu que tu ne boucles pas sur le résultat de la seconde requête, ça ne m'étonne pas que t'ai X fois les même données à l'affichage. D'ailleurs je n'ai pas compris à quoi ça te sert de chercher des données que t'as déjà reçu.

Reply

Marsh Posté le 29-01-2009 à 16:48:16    

Je n'ai pas regardé dans le détail, mais c'est peut-être un problème de paramètres passés à la fonction. Par exemple, je vois que le mot $resultats est utilisé pour des choses différentes, et peut-être qu'il y aurait une interférence.
 
(Et puis ce serait plus lisible en mettant le code entre des balises [fixed ] et [/fixed] ou [cpp ] et [/cpp], ce qui peut se faire en sélectionnant le code et en cliquant sur le bouton "Fixe" ou "C/C++".)

Reply

Marsh Posté le 30-01-2009 à 08:43:14    

Salut à tous,
Merci pour le truc du [fixed], je ne connaissais pas et l'ai donc ajouté.
 
Pour mon problème, je cherche juste à faire une requête qui me récupère les entrées d'une table contenant une clé double suivant un critère de saisie de l'utilisateur et d'afficher ensuite les données.
 
Dans le code donné précédemment, le "selectLines" fait la requête en fonction d'un critère que l'utilisateur a entré dans un formulaire. Le "selectTypeSourceSimple" sert à initialiser l'objet avec les valeurs (table à trois champs).
 
Ensuite, je veux juste afficher les objets créés.
 
Merci dans tous les cas pour la rapidité de vos messages et pour vous être penché dessus.

Reply

Marsh Posté le 30-01-2009 à 10:59:45    

Le problème de ton selectTypeSourceSimple, c'est qu'il prend une ampoule au hasard (le premier de la liste retourné par mysql) parmi celles du type indiqué alors que d'après ta fonction principale il faudrait qu'il initialise l'objet avec les données récupéré par la fonction principale.

Reply

Marsh Posté le 30-01-2009 à 12:41:11    

Merci pour la réponse mais pour abuser... Quelqu'un pourrait-il m'écrire une fonction qui prendrait une valeur en entrée (le type justement, retourné depuis le formulaire) et qui ressortirait la liste complète ayant ce type (donc le type avec ses puissances)  :jap:  
 
En tout cas, merci pour la rapidité des réponses aussi  ;)

Reply

Marsh Posté le 30-01-2009 à 12:56:51    

Vu que tu sais demander les données à la base de donnée et boucler sur la réponse pour les récupérer, je ne vois pas ce qui te bloque pour cette fonction somme toute très simple. ;)

Reply

Marsh Posté le 30-01-2009 à 13:17:38    

Bah, la fin de la semaine et l'approche du week-end sans doute ;)
 
J'ai encore tout l'à-côté à faire donc je reposte si je ne m'en sors pas et que je pète un plomb  :pt1cable:  :pt1cable:  :pt1cable:  
 
Merci dans tous les cas.
 
++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed