Discussion: mysql
Afficher un message
Vieux 27/03/2008, 17h40   #7
O.L.
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: mysql

alainL a formulé la demande :
> O.L. a écrit :
>> alainL avait écrit le 26/03/2008 :
>>> Bonsoir,
>>> Je cherche un forum en français sur l'utilisation de mysql. Si vous avez
>>> ça dans vos tablettes... merci à l'avance !
>>>
>>> A tout hasard, voilà le prb:
>>> Je classe des fleurs. L'un des champs "petales" contient le nb de
>>> petales... (oui !) Mon "enum" offre plusieurs categories : 3,4,5,6à10,
>>> plus...
>>> Pour certaines fleurs, je voudrais qu'elles répondent vrai à deux
>>> catégories... (anemone peut avoir 5 mais aussi 7 ou 8 petales)
>>> Pour le moment je ne vois qu'une soluce: enregistrer deux lignes "anemone"
>>> l'une avec 5, l'autre avec 6à10....

>>
>> La solution la plus simple serait de changer ton champ ENUM en SET (hyper
>> facile via PHPMyAdmin).
>> Ainsi il pourra avoir comme valeur 1 ou plusieurs valeurs de ta liste, et
>> non plus une seule à la fois.
>>
>> "Un SET est une chaîne qui peut avoir zéro ou plusieurs valeurs, chacune
>> doit être choisie dans une liste de valeurs définies lors de la création de
>> la table. Les valeurs des colonnes SET composées de plusieurs membres sont
>> définies en séparant celles-ci avec des virgules (','). Ce qui fait que la
>> valeur d'un membre de SET ne peut contenir lui même de virgule."
>>
>> Plus d'infos sur http://dev.mysql.com/doc/refman/5.0/fr/set.html
>>

> Merci.
> Bon sang ! C'est magnifique ça ! J'avais pensé comme Bruno, à créer deux
> champs mini et maxi mais là, c'est le top !
> Donc, je crée un champ "nb_petales" SET pouvant valoir "4" ou "5" ou
> "5,6,7,8" (entrée à la souris ds une liste box, j'aurai 400 fleurs à marquer)
>
> Et pour la requete:
> select from.... where nb_petales like '%nb_petales%' ??
> elle sera capable de pêcher le "6" dans "5,6,7,8" ??


Oui tout à fait.

Mais ce n'est pas la seule méthode, cf. la doc :

Normalement, vous exécuterez un SELECT sur une colonne SET en utilisant
l'opérateur LIKE ou la fonction FIND_IN_SET() :

mysql> SELECT * FROM nom_de_table WHERE set_col LIKE '%value%';
mysql> SELECT * FROM nom_de_table WHERE FIND_IN_SET('value',set_col)>0;

Mais ce qui suit fonctionnera aussi :

mysql> SELECT * FROM nom_de_table WHERE set_col = 'val1,val2';
mysql> SELECT * FROM nom_de_table WHERE set_col & 1;

La première requête cherche les lignes qui correspondent exactement. La
seconde ne cherche que les lignes contenant le premier membre du set.

--
Olivier Ligny


  Réponse avec citation
 
Page generated in 0,06097 seconds with 9 queries