Page 1 sur 1

Transformer une requete Mysql en tableau "Array"

Posté : 12 déc. 2005, 13:02
par zepretender
Bonjour,

Soit une requete mysql :
$req = SELECT id,lib FROM themes

J'aimerai créer un tableau "array()" à partir des résultats de ma requete...

Comment faire ? Une boucle While ?

$themes = array(
lib => id,
)

Merci

Posté : 12 déc. 2005, 13:21
par zeus
avec mysql_fetch_array, c'est fait tout seul

Posté : 12 déc. 2005, 13:48
par sadeq
Voici comment faire:
//Connecter au serveur localhost
$connexion = mysql_connect("localhost", "root", "");

//La requête SQL
$req = "SELECT id,lib FROM themes";

//Exécution de la requête
$resultat = mysql_db_query("base", $sql, $connexion);

//Affichage des lignes du resultat
while ($ligne = mysql_fetch_array($resultat)){
  echo "<p>id= $ligne[0] , lib= $ligne[1]";
}

Posté : 12 déc. 2005, 14:39
par zepretender
Merci pour vos réponses, mais ce n'est pas ça...


Ma base contient un identifiant et un libellé,
1 présentation
2 emploi
3 employeur
4 base doc

j'aimerai qu'une fois la requete executée, on puisse transformer la requête en un tableau de ce style

Code : Tout sélectionner

$tableau= array ( "Présentation" => 1, "Emploi" => 2, "Employeur" => 3, "Fond documentaire" => 4 );
de manière à utiliser la fonction array_search() dans $tableau.

Merci

Posté : 12 déc. 2005, 15:46
par sadeq
D'accord, c'est vrai que ta question n'était pas trés claire, voici comment faire:

//Connecter au serveur localhost 
$connexion = mysql_connect("localhost", "root", ""); 

//La requête SQL 
$req = "SELECT id,lib FROM themes"; 

//Exécution de la requête 
$resultat = mysql_db_query("base", $sql, $connexion); 

//Contruire ton array comme tu le veux (le lib sera utilisé pour servir d'index et l'id de contenu)
$tableau = null; //initialisation du tableau à construire

//Boucle de lecture du résultat SQL
while ($ligne = mysql_fetch_array($resultat)){ 
   //Ajout d'un thème dans le tableau (lib => id)
   $tableau [] = array("$ligne[1]" => $ligne[0] ); 
}

Posté : 12 déc. 2005, 16:08
par zepretender
C'est presque ça...

Si je fais

Code : Tout sélectionner

//Ajout d'un thème dans le tableau (lib => id) $tabType [] = array("$ligne[1]" => $ligne[0]); } foreach ($tabType as $key => $val){ echo "$val > $key <br/>"; }
j'obtiens :
array > 0
array > 1
array > 2

Alors que je devrais obtenir
Présentation > 1
Emploi > 2
Employeur > 3
Fond documentaire > 4

Je ne comprends vraiment rien à tout ça... je patauge complètement !

Posté : 12 déc. 2005, 17:08
par sadeq
Non, tel qu'il est contruit le tableau contient tous les thèmes dont chacun est formaté comme un sous-array (lib=>id)

Remarques que l'écriture : $tabType [] = array(.......); crée un array dans un array :
Le premier array c'est $tabType qui contient tous les thèmes
Le second est un sous-array par ligne de $tabType qui correspond à un thème (lib=>id)

Tu dois utiliser une seconde sous-boucle pour accèder à chaque thème :
   foreach ($tabType as $thème){ 
     foreach ($thème as $key=>$val) {
         echo "$val > $key <br/>";
     }
   }

Posté : 13 déc. 2005, 14:25
par zepretender
Ok, cette fois, ça marche... mais du coup, comment faire une recherche dans ce sous-tableau ?

En effet, comment à partir d'une variable contenant 2 indiquer qu'il s'agit de "Emploi " ? Array_search semble ne chercher que dans le tableau principal...

Merci d'avance.

Posté : 13 déc. 2005, 14:53
par sadeq
En fait, on a compliqué un petit peu la structure du tableau, ça ne plait plus avec du recul.
Au lieu d'utiliser un tableau dans un autre, on aurait du n'utiliser qu'un seul, en conservant la structure telle que tu la veux et en facilitant les recherches.

Pour chercher un libellé dans le tableau on peut y accèder directement par l'indexe "id".
Sous PHP, la fonction isset() va nous permettre de savoir si un id existe en tant qu'index dans le tableau et si oui, on peut alors accèder au libellé par : $tableau["id"]

Tiens, j'ai modifié le code pour n'utiliser qu'un array indexé par "id" et contenant "lib".
//Connecter au serveur localhost 
$connexion = mysql_connect("localhost", "root", ""); 

//La requête SQL 
$req = "SELECT id,lib FROM themes"; 

//Exécution de la requête 
$resultat = mysql_db_query("base", $sql, $connexion); 

//Contruire ton array 
$tableau = null; //initialisation du tableau à construire 

//Boucle de lecture du résultat SQL 
while ($ligne = mysql_fetch_array($resultat)){ 
   //Ajout d'un thème dans le tableau (id =>lib) 
   $tableau ["$ligne[0]"] = $ligne[1] ; //ligne corrigée
}

//Affichage
if ($tableau && count($tableau)>0) {
 foreach ($tableau as $key=>$val) { 
         echo "$val > $key <br/>"; 
     }

//Recherche du libellé de l'id "2"
$id_recherché = 2;
//L'accès est indexé par id dans le tableau ne l'oublions pas : ce qui facilite la recherche
if (isset($tableau["$id_recherché"])) 
    echo "<p>Libellé de l'id '$id_recherché' est $tableau[$id_recherché]";
else 
    echo "<p>L'id '$id_recherché' est introuvable!";

} else echo "<p>Aucun thème!"; //le tableau est vide

Posté : 13 déc. 2005, 15:18
par zepretender
Ok, ça a fini par marcher : j'ai juste changé :
$tableau ["$ligne[0]"] = $ligne[1] ; //ligne corrigée

en
$tableau [$ligne[0]] = "$ligne[1]" ;

Pour que cela fonctionne... et cela fonctionne !!!

Merci infiniement !!!