Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mysql

22 réponses
Avatar
alainL
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....

--
Alain L

Mon village en Haute Soule : http://jarailet.club.fr
Carnet de voyages: http://jarailet.club.fr/Randobal

10 réponses

1 2 3
Avatar
Thierry B.
--{ alainL a plopé ceci: }--

Bonsoir,
Je cherche un forum en français sur l'utilisation de mysql. Si vous avez
ça dans vos tablettes... merci à l'avance !



A suivre sur fr.comp.applications.sgbd


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....



(hi hi hi)

--
A horse will do most of its maintenance itself, but it needs fuel even if
you're not using it.
Avatar
Bruno Desthuilliers
alainL a écrit :
Bonsoir,
Je cherche un forum en français sur l'utilisation de mysql. Si vous avez
ça dans vos tablettes... merci à l'avance !



fr.comp.applications.sgbd

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....



Soluce 1 : utilise deux champs nb_petales_min et nb_petales_max. Pour
anémone, tu aura nb_petales_min = 5 et nb_petales_max = 8

Soluce 2 : utilise une table liée pour la description du nombre de
pétales, avec une relation plusieurs à plusieurs entre fleurs et
nombre_petales.

Je ne connais pas assez le domaine pour te dire a priori quelle solution
est la plus appropriée, mais en gros : si une anémone peut avoir 5 ou 7
ou 8 pétales mais *pas* 6, alors utilise la seconde solution. Voit aussi
en fonction des requêtes les plus fréquentes
Avatar
O.L.
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

--
Olivier Ligny
Avatar
alainL
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" ??



--
Alain L

Mon village en Haute Soule : http://jarailet.club.fr
Carnet de voyages: http://jarailet.club.fr/Randobal
Avatar
CrazyCat
alainL wrote:
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 mais ce n'est pas "bien", si tu as "16" ou "65", tu auras un retour.
Tu peux utiliser WHERE FIND_IN_SET('6', nb_petales)

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces webmasters : http://www.c-p-f.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Avatar
O.L.
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
Avatar
alainL
CrazyCat a écrit :
alainL wrote:
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 mais ce n'est pas "bien", si tu as "16" ou "65", tu auras un retour.
Tu peux utiliser WHERE FIND_IN_SET('6', nb_petales)





Probleme de structure du set. J'ai beau jongler avec les guillemets,
virgules et espaces, je ne peux entrer que les valeurs contenant un seul
nombre.
Voici la syntaxe de mon set, mySQL(4;0;15) m'a refusé ou modifié pas mal
d'autres.

set('', '0, 1, 2, 3', '4', '5, 6, 7, 8, 9, 10', '6', '11')

4 ou 6 ou 11 sont acceptés et apparaissent dans la table, mais pas "0,1,2,3"

--
Alain L

Mon village en Haute Soule : http://jarailet.club.fr
Carnet de voyages: http://jarailet.club.fr/Randobal
Avatar
Olivier Miakinen
[ copie et suivi vers fr.comp.applications.sgbd ]

Le 27/03/2008 18:08, alainL a écrit :

Probleme de structure du set. J'ai beau jongler avec les guillemets,
virgules et espaces, je ne peux entrer que les valeurs contenant un seul
nombre.
Voici la syntaxe de mon set, mySQL(4;0;15) m'a refusé ou modifié pas mal
d'autres.

set('', '0, 1, 2, 3', '4', '5, 6, 7, 8, 9, 10', '6', '11')

4 ou 6 ou 11 sont acceptés et apparaissent dans la table, mais pas "0,1,2,3"



1) Tu sembles essayer '0, 1, 2, 3' avant de dire que c'est "0,1,2,3" qui
ne marche pas. As-tu essayé '0,1,2,3' ?

2) Les experts, dont je ne suis pas, sont sur fr.comp.applications.sgbd
vers où je dirige la suite de la discussion.
Avatar
SAM
Olivier Miakinen a écrit :

2) Les experts, dont je ne suis pas, sont sur fr.comp.applications.sgbd
vers où je dirige la suite de la discussion.



Dommage ... j'étais en train d'apprendre des trucs là.

C'est assez exaspérant de se voir couper les feuilletons comme ça.
Où est donc ma zapette ? que je change de chaine.


--
sm
Avatar
O.L.
alainL a présenté l'énoncé suivant :
CrazyCat a écrit :
alainL wrote:
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 mais ce n'est pas "bien", si tu as "16" ou "65", tu auras un retour.
Tu peux utiliser WHERE FIND_IN_SET('6', nb_petales)





Probleme de structure du set. J'ai beau jongler avec les guillemets, virgules
et espaces, je ne peux entrer que les valeurs contenant un seul nombre.
Voici la syntaxe de mon set, mySQL(4;0;15) m'a refusé ou modifié pas mal
d'autres.

set('', '0, 1, 2, 3', '4', '5, 6, 7, 8, 9, 10', '6', '11')

4 ou 6 ou 11 sont acceptés et apparaissent dans la table, mais pas "0,1,2,3"



Non, pour définir le set dans la structure de la table il faut utiliser
la syntaxe suivante :
SET('value1','value2',...)

Donc en entourant chaque valeur possible (hors combinaisons) par des
guillemets :
set('', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11')

Et ensuite quand tu veux faire un UPDATE ou un INSERT, tu fais :
update matable set nb_petales='9' where ...
update matable set nb_petales='3,4,5' where ...
update matable set nb_petales='0,1,2,8,9' where ...


--
Olivier Ligny
1 2 3