Récuperer nom d'un champ d'une table

Mammouth du PHP | 686 Messages

01 nov. 2008, 15:46

Bonjour,
je créé actuellement un site de vente et je me trouve confronté à un soucis
je voudrais effectuer une recherche dans une table qui est structurée comme ceci
id, ref, prix, ref2, prix2
Je souhaiterai faire une recherche dans ma table qui me donne le nom du champ en fonction de la reference, savoir si c'est ref ou ref2
parce que pour le moment j'ai fait ca mais j'ai testé ca marche mais ca a eté c'est dur dur !
<?php
$reference = $_GET['ref'];
include("connect.php");
MYSQL_CONNECT($serveur,$utilisateur,$mdp) or die ("Connexion impossible");
MYSQL_SELECT_DB($db) or die ("Connexion à la base $base impossible");
$sql = mysql_query("SELECT * FROM coupes_trophees WHERE reference LIKE '$reference'");
$nbr=mysql_num_rows($sql);
if($nbr > 0){
while($result=mysql_fetch_array($sql)){
$prix = $result['prix'];
}
}
  else{
  $sql2 = mysql_query("SELECT * FROM coupes_trophees WHERE ref2 LIKE '$reference'");
  $nbr2=mysql_num_rows($sql2);
  if($nbr2 > 0){
  while($result=mysql_fetch_array($sql2)){
  $prix = $result['prix2'];
  }
  }
    else{
    $sql3 = mysql_query("SELECT * FROM coupes_trophees WHERE ref3 LIKE '$reference'");
    $nbr3=mysql_num_rows($sql3);
    if($nbr3 > 0){
    while($result=mysql_fetch_array($sql3)){
     $prix = $result['prix3'];
    }
    }
      else{
      $sql4 = mysql_query("SELECT * FROM coupes_trophees WHERE ref4 LIKE '$reference'");
      $nbr4=mysql_num_rows($sql4);
      if($nbr4 > 0){
      while($result=mysql_fetch_array($sql4)){
      $prix = $result['prix4'];
      }
      }
      } 
    }
}
echo "prix : ";
echo $prix;
echo " Euros";
?>
je sais pas si j'ai reussi a me faire comprendre
Je vous remercie beaucoup d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 nov. 2008, 17:41

hmm... curieuse question... en général, le nom du champ de la table on le connait, c'est le contenu qui nous interesse... à voir donc s'il n'y a pas un problème de conception.

A part cela, tu peux très bien dans te requête ajouter des clauses OR pour spécifier différentes conditions :

Code : Tout sélectionner

WHERE reference = '$reference' OR ref2 = '$reference' OR ref3 = '$reference' ...
L'intérêt, c'est que tu n'exécutera qu'une seule requête, qui te renverra les enregistrements correspondant à l'une ou l'autre de ces conditions. Il te suffit ensuite de regarder avec de simple if/else à laquelle elle correspond :
$prix = 0;
if ($result['reference']==$reference)
  $prix = $result['prix']; 
elseif ($result['ref2']==$reference)
  $prix = $result['prix2']; 
...
A noter, quand en SQL tu fais une comparaison exacte, utilise le "=" plutôt que LIKE. Ta requête sera plus performante (cf. les bonnes pratiques). De même au lieu de faire un "SELECT *" tu peux lister les champs que tu souhaites récupérer. Ca rend le code plus optimisé et plus facile à maintenir :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 686 Messages

02 nov. 2008, 00:24

merci beaucoup, c'est vrai que cette synthaxe est mieux !
Je n'ai pas encore les bons reflexe ...