|
|
|
|
Posté par
lazabelle, le vendredi 12 octobre 2007 à 15:52:11Configuration: Windows XP Internet Explorer 6.0
Salut Lazabelle,
C'est une question très intéressante qui m'a amené à lire les commentaires sur certains articles indiquant la requête "show columns", que voici : http://dev.mysql.com/doc/refman/5.0/en/set.html . Ils présentent au minimum deux méthodes pour avoir ce que tu veux. J'en conlcus (mais il faudrait tester) qu'une requête de type show columns from ma_table like 'couleur'(si j'ai bien compris la syntaxe) renvoie une ligne représentant les informations désirées avec la deuxième colonne contenant la liste des valeurs de la colonne set séparées par des virgules (+ le mot clé "set"). Certains utiliseraient le nom de colonne "Type" plutôt que de récupérer le deuxième indice numériquement... enfin il faudrait vraiment tester, si tu pouvais nous tenir au courant ce serait chouette. Bref, à la fin il suffit d'utiliser la méthode split (appuyée d'un nettoyage préalable) pour récupérer les différentes valeurs dans un tableau (et donc les placer dans une combobox ou ce que tu veux). Ici le résumé des deux méthodes, avec en gras ce qui me semble essentiel :
Here's some PHP code to return the possible
options of a set as an array.
<?
/**
* @return array
* @param table DB table
* @param column Column name
* @desc Return an array of the possible values for a SET
*/
function get_set($table,$column)
{
$sql = "SHOW COLUMNS FROM $table LIKE '$column'";
if (!($ret = mysql_query($sql)))
die("Error: Could not show columns");
$line = mysql_fetch_assoc($ret);
$set = $line['Type'];
$set = substr($set,5,strlen($set)-7); // Remove "set(" at start and ");" at end
return preg_split("/','/",$set); // Split into and array
}
?>
If you want to get an array in php with all possible values for an ENUM or SET column, you should use: SHOW COLUMNS FROM table_name LIKE 'enum_column_name' (with or without %-wildcards), and parse it with the following php script:
$result=mysql_query($query);
if(mysql_num_rows($result)>0){
$row=mysql_fetch_row($result);
$options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));
}
Now $options is an array with all possible values
à tester, bon courage ! :-) |
Merci Posotaz...
...pour ta réponse et pour les liens et scripts. J'ai essayé la première méthode avec preg_split, et ça fonctionne parfaitement. SAUF QUE c'était idiot de ma part de parler de SHOW COLUMNS car en fait j'ai besoin d'extraire chacune des valeurs qui sont utilisées dans ma table et pas l'ensemble des valeurs possibles. je retourne à mon exemple du 1er post en ayant modifié les données en gras: nom1, prenom1, gris nom2, prenom2, rouge, gris nom3, prenom3, gris,rouge. je voudrais intégrer dans ma liste déroulante ces valeurs là : - gris - rouge et non pas comme avec la méthode show columns + split : - gris - rouge - violet (puisque violet n'est pas encore une valeur utilisée dans ma table). Bon j'espère que je suis à peu près claire... merci en tout cas de m'avoir mis sur la piste de preg_split, car je pense que c'est en parsant les valeurs de ma table que je vais y parvenir. (dommage en tout cas que ce ne soit pas possible avec une requête mysql !) @+ |
Bon bein finalement je n'ai pas trouvé la solution que je cherchais, par contre voilà ce que je fais pour avoir les valeurs que je veux dans ma liste déroulante. En gros je récupère mes valeurs préalablement parsées dans une table temporaire que j'utilise pour remplir ma liste.
//je crée une table temporaire qui récupèrera tout à l'heure les données parsées mais qui recevra des doublons $query=mysql_query("CREATE TABLE `couleur_temp` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `couleur` VARCHAR( 50 ) NOT NULL )") or die (mysql_error()); // je sélectionne les couleurs présentes dans ma table ma_table : $contenu_couleurs=mysql_query("SELECT DISTINCT couleur FROM ma_table") or die (mysql_error()); // je compte le nbre de résultats (de lignes retournées) $count=mysql_num_rows($contenu_couleurs); // je récupère les résulats dans un tableau while ($donnees_couleurs=mysql_fetch_array($contenu_couleurs)) { $parse[0]=preg_split("/,/",$donnees_couleurs['couleur']); //ici je parse mon résultat au cas où il y ait plusieurs valeurs $nbre_res=count($parse[0]); //je compte le nbre de valeurs parsées //boucle pour remplir la table temporaire couleur_temp. for($e=0; $e<$nbre_res; $e++) { $donnee=$parse[0][$e]; $query=mysql_query("INSERT INTO couleur_temp VALUES ('','$donnee')") or die (mysql_error()); } } //et c'est donc à partir de cette table que je remplis ma liste déroulante $contenu_couleur_temp=mysql_query("SELECT DISTINCT couleur FROM couleur_temp ORDER BY couleur") or die (mysql_error()); while ($donnees_couleur_temp=mysql_fetch_array($contenu_couleur_temp)) { echo'<option value="'.$donnees_couleur_temp['couleur'].'">'.$donnees_couleur_temp['couleur'].'</option>'; } //et je supprime ma table que je voulais temporaire (et comme je ne sais toujours pas utiliser [TEMPORARY]...) $suppr=mysql_query("DROP TABLE couleur_temp") or die (mysql_error()); voilou... mais je pense qu'il doit y avoir plus simple, n'étant une pro ni de php ni de mysql, je ne connais pas toutes les fonctions ou manips possibles. donc si certains passant par là peuvent m'éclairer sur ce point... Merci d'avance !
|
Merci, pour tes conseils que je vais suivre ! |
|
problème résolu... |
| 29/05 23h04 | Introduction à la STL en C++ ((standard template library) | Langage C++ |
| 16/06 19h28 | [MSN Messenger] Ajout en masse d'émoticônes | MSN Messenger |
| 03/03 11h28 | Exporter/Sauvegarder ses émoticones, avatars et clins d'oeil MSN | MSN Messenger |
| 14/03 23h05 | Les fichiers et les outils de configuration de Ingres | Ingres |
| 27/10 00h37 | [PHP] Les ressemblances à ne pas confondre | PHP |
| 21/05 14h20 | [MYSQL] utilisation fichier *.sql | 4 |
| 23/05 19h24 | Requête mySQL utilisant WHERE et SUBSTR | 5 |
| 08/12 19h17 | [MySQL] Utiliser une fonction dans "default&q | 0 |
| 23/07 16h29 | [MySQL] Utilisation de plusieurs serveurs | 1 |
![]() | Inno Setup - Inno Setup est un installeur entièrement gratuit. Il crée des exécutables permettant d'installer les logiciels que vous avez... | Catégorie: Développement Licence: Freeware/gratuit |
![]() | SetBrowser - SetBrowser est un programme très simple permettant de définir le navigateur par défaut dans Windows. Choisir le... | Catégorie: Web Licence: Freeware/gratuit |
![]() | MySQL - MySQL est une des systèmes de gestion de bases de données le plus répandu au monde. | Catégorie: Bases de données Licence: Open Source |
![]() | WAMP Server - WAMP5 (WAMP signifiant Windows Apache Mysql PHP) est une plateforme de développement Web sous Windows. Il vous permet de... | Catégorie: Serveurs Licence: Freeware/gratuit |
![]() | Typhoon Wireless Multimedia Set | Catégorie: Clavier | |
![]() | SanDisk CompactFlash 512 Mo | Catégorie: Carte Mémoire / Clé USB | |
![]() | SanDisk Compact Flash 1 | Catégorie: Carte Mémoire / Clé USB | |
![]() | Olympus XD-Picture Card 2 | Catégorie: Carte Mémoire / Clé USB | 17.23 € Rue du Commerce |