Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/04/2006, 09h30   #1
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Par défaut etbinaire oubinaire dans conditions ...

Bonjour,
soit une table categories
Code :
1
2
3
4
5
Avec cat_cle(cleunik),cat_des(texte désignation),cat_souscat(bigint sous-catégories)
alimentée :
1,"Catégorie 1",35
2,"Catégorie 2",64
3,"Catégorie 3",31
et une table sous_categorie avec
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Avec sc_cle(cleunik bigint),sc_des(texte désignation)
Alimentée :
   1,"SS  1"
   2,"SS  2"
   4,"SS  3"
   8,"SS  4"
  16,"SS  5"
  32,"SS  6"
  64,"SS  7"
 128,"SS  8"
 256,"SS  9"
 512,"SS 10"
1024,"SS 11"
2048,"SS 12"
etc
Si la zone cat_souscat de la table catégories =
35->1+2+32 (SS1 & SS2 & SS6)
64->64 (SS7)
31-> 1+2+4+8+16 (SS1 & SS2 & SS3 & SS4 & SS5)
etc
Est-il possible de formuler dans une requête
-1 Que l'on veut récupérer toutes les catégories liées à la sous-catégorie "SS2" (etbinaire 2) (select * from categorie where cat_souscat ???)
-2 Que l'on veut afficher, pour chaque catégorie toutes les sous catégories (select cat_cle,cat_des,sc_des ?? from ??? where cat_cle=1) renverrai
1,Categorie 1, SS1
1,Categorie 1, SS2
1,Categorie 1, SS6
???

--
Cordialement,
Christophe Charron
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 10h42   #2
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Bonjour,

Oui, cela doit être possible avec ce type de condition :
Code :
(sc_cle & cat_souscat) != 0
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 10h46   #3
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Heu, c'est quoi cette modélisation ?

Tu as pensé aux pauvres confrères qui vont devoir maintenir ta base ?
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 11h51   #4
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par Maximilian
Heu, c'est quoi cette modélisation ?

Tu as pensé aux pauvres confrères qui vont devoir maintenir ta base ?
Tu vas pas me dire que ça fait peur à un geek comme toi ?

Si en plus l'informatique devait devenir accessible à tout le monde, comment pourrions nous justifier des émoluements galactiques qui nous sont dûs ? ...

Et puis dans un espace relativement fini, un bigint nous permet de monter assez loin, ça me semble plus souple que d'avoir une table de relations mais c'est un point de vue et ce n'est que le mien mais faut-il encore pouvoir l'appliquer souplement ...

Je le fais déjà mais pas en SQL, dans du code
Code :
1
2
3
4
5
 
SI ETBinaire(vl_e_val_Binaire, 1) <> 0	ALORS vl_c_chaine+="Catin"
	SI ETBinaire(vl_e_val_Binaire, 2) <> 0	ALORS vl_c_chaine+=" Cattou"
	SI ETBinaire(vl_e_val_Binaire, 4) <> 0	ALORS vl_c_chaine+=" Catcat"
	SI ETBinaire(vl_e_val_Binaire, 8) <> 0	ALORS vl_c_chaine+=" Caribou"
Pourtant pas compliqué non ?
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 11h52   #5
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par Adjanakis
Bonjour,

Oui, cela doit être possible avec ce type de condition :
Code :
(sc_cle & cat_souscat) != 0
Vivi ... mais encore ??
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 12h09   #6
Membre habitué
 
Inscription : février 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 118
Points : 116
Points : 116
Je ne pense pas que ton modèle soit très pratique à utiliser. Je ne sais pas si tu as déjà fait des conversions décimales --> binaires mais je crois que la solution passera par ça.

Si tu prends le nombre 117 par exemple et que tu le convertis en binaires tu obtiens la valeur 1110101 ce qui signifie donc que:
117 = (1 * 2^0) + (0 * 2 ^ 1) + (1 * 2 ^ 2) + (0 * 2 ^ 3) + (1 * 2 ^ 4) + (1 * 2 ^ 5) + (1 * 2 ^ 6)

Je pense que pour une cacégorie avec une cat_souscat de 31 c'est le même principe, tu convertis ton nombre en binaire et où il y a des 1 c'est qu'il y a une catégorie au-dessus. Pour la trouver il faut élever la puissance.

Dans l'exemple du 117 il y aurait donc 5 catégories (c'est le nombre de 1 de la valeur binaire) et elles auraient la valeur 1, 4, 16, 32, 64.

Mettre ça dans une requête ça me semble un peu compliqué, y'a certainement un système plus simple à l'aide de PK et FK.
yizashi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 12h38   #7
Membre habitué
 
Inscription : février 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 118
Points : 116
Points : 116
Voici une petite suggestion qui j'espère pourra convenir à ton cas:

Je pense que tu devrais créer une classe "categorie", une classe "sousscat" et une classe "appartenir" (classe association).

La classe categorie contiendrait une PK (id) et une désignation (designation).

La classe souscat contiendrait également une PK (id) et une désignation (designation).

La classe appartenir contiendrait 2 FK: id_categorie et id_souscat.

Toutes les Pks seraient de simple valeur auto-incrémentée (1,2,3,4,5,...)

Si une sous-catégorie SS6 (disons que l'id=4)appartient à 3 catégories (cat1 id=2, cat2 id=5, cat3 id=11) alors tu aurais 3 lignes dans la classe "appartenir" avec les valeurs suivantes:
4 2
4 5
4 11

Si tu cherches toutes les sous-catégories qui appartiennent à SS6 tu ferais donc une requête du type
Code :
SELECT id_souscat FROM appartenir WHERE id_categorie = 4
Une petite jointure et tu aurais aussi le nom des sous-catégories:
Code :
SELECT a.id_souscat, s.designation FROM appartenir a, souscat s WHERE a.id_categorie = 4 AND a.id_souscat = s.id
Je ne garantis pas l'exactitude de mes requêtes mais c'est à peu près ça.

Ce serait plus simple de connaitre le contexte pour être sûr de moi. Je pense que pour gérer des catégories une seule table doit suffir, avec une FK sur elle-même.

Bonne chance
yizashi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 13h14   #8
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par yizashi
Voici une petite suggestion qui j'espère pourra convenir à ton cas:

Je pense que tu devrais créer une classe "categorie", une classe "sousscat" et une classe "appartenir" (classe association).
Bonne chance
Déjà que je maitrîse à peine le select * dans mysql mais alors les classes ... !!
Ou puis-je trouver de la doc et tutos sur les classes en Mysql
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 15h24   #9
Membre habitué
 
Inscription : février 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 118
Points : 116
Points : 116
Une classe c'est une table en fait... enfin à peu près. Petit tentative d'explication:

En modélisation, on construit d'abord un modèle conceptuel, puis un modèle logique et finalement un modèle physique.

Le modèle conceptuel est composé de classes, ces classes comportent des attributs. Chaque classe a également des liens avec d'autres classes et des cardinalités. Les cardinalités indiquent par exemple si un employé peut avoir 1 fonction (cardinalité 1) ou plusieurs (cardinalité *).

Lorsque ce modèle est terminé (c'est la phase la plus longue), on le transforme d'une manière "automatique" (pas besoin de réflexion, un programme peut le faire) en en modèle logique. Dans le modèle logique les "classes" sont devenues des "tables".

Tout cette partie peut se faire sur papier et est facultative. Mais pour des choses complexes c'est nécessaire.

Vient ensuite le modèle physique qui consiste à adapter le modèle logique à la base de données que tu utilises.

--------------------

Bref si je ne me trompe pas, tu veux pouvoir créer des catégories et connaître quelles sont leurs sous-catégories (s'il y en a). Il faudrait encore savoir si une catégorie n'a qu'un seul parent direct ou non.

Est-ce que par exemple "sous-catérogie1" peut être directement lié à catégorie2 ET catégorie3 ?
Ou est-ce que, comme dans un système de fichier, sous-categorie1 est un enfant de categorie3 qui lui-même est enfant de categorie2 ?
yizashi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2006, 10h12   #10
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par Adjanakis
Bonjour,

Oui, cela doit être possible avec ce type de condition :
Code :
(sc_cle & cat_souscat) != 0
Bonjour,
et pardon pour le test tardif : non seulement c'est possible, mais en plus ça marche (v 4.1.12 ) !!!
Mais je suis très preneur de liens vers des docs expliquant cela (parce qui sait il y a peut-être d'autres fonctions magiques ... )

Merci encore
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h26.


 
 
 
 
Partenaires

Hébergement Web