Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/12/2012, 22h50   #1
Kalram
Invité de passage
 
Homme
Webmaster
Inscription : février 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre (Centre)

Informations professionnelles :
Activité : Webmaster
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2012
Messages : 5
Points : 0
Points : 0
Par défaut Insérer dans une table une valeur extraite de cette même table + des valeurs ajoutées manuellement

Bonsoir,

J'aimerais quelques pistes pour avancer sur un casse tête qui me tient à cœur. Je cherche à ajouter dans une table de nouvelles valeurs, mais seulement dans certaines conditions, dans l'optique de la réorganisation d'une base de donnée de spécifications techniques.

La table en question, nommée fiche_champs, fais le lien entre les critères techniques et les fiches produits en question. Elle comprends les colonnes suivantes : id (id de la relation), id_fiche (id de la fiche produit), id_champs (id d'un critère, correspondant par exemple à "Poids"), id_champs_value (id de la valeur de ce critère, correspondant par exemple à "5 Kg"), string_valeur (intitulé textuel de la valeur : 5-KG), num_valeur (valeur numérique attribuée permettant une recherche avec des opérateurs logiques, par exemple "5")

Je cherche donc à ajouter de nouvelles relations à cette base.
Par exemple, je vais créer un nouveau champ intitulé "catégorie de poids" et une valeur pour ce même champs intitulée "Lourd".

Je vais donc chercher à isoler toutes les entrée de cette table contenant l'"id_champs_value" correspondant à 5 Kg, récupérer les données, et ajouter une nouvelle relation entre les fiches concernées et ma nouvelle valeur Lourd.

(Déjà, est-ce que ma démarche vous semble correcte ?)

Je calle donc maintenant sur la structure de ma requête. Voici où j'en suis :

Code :
1
2
3
4
5
6
7
INSERT INTO fiche_champs (id_fiche, id_champs, id_champs_value, string_valeur, num_valeur)
 
VALUES ( (SELECT id_fiche
 
FROM fiche_champs
 
WHERE id_champs_value=2027;) , 225, 2030, 'LOURD', 5);
Mon SELECT imbriqué dans le VALUES n'est pas correct, mais c'est la "meilleure" manière que j'ai trouvé pour modéliser mon but.

D'après vous, est-ce la bonne approche ?

Edit : modification du titre pour mieux refléter ma demande +
correction de mon erreur de parenthèse
Kalram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 23h20   #2
Exia93
Membre Expert
 
Homme
Étudiant
Inscription : avril 2012
Messages : 611
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2012
Messages : 611
Points : 1 069
Points : 1 069
Bonsoir,

peut tu préciser d'ou vienne tes données , déjà en base, fichier XML, fichier SQL, ...

Si tes données sont déjà stocké en BDD tu peut utiliser une requête :
Code :
1
2
INSERT INTO fiche_champs(id_fiche, id_champs, id_champs_value, string_valeur, num_valeur)
SELECT ... FROM ... WHERE ...;
Tu pourra alors insérer dans ta table ficher_champs les données récupérés avec ta requête SELECT,

la ou cela devient intéressant c'est que tu peut soumettre la valeur de la colonne categorie_de_poid à une condition avec l'opérateur WHEN ou IF du SQL,

elles te permettront si la valeur de num_valeur est supérieur à 50 alors categorie_de_poid vaudra lourd, etc.

Donc en une seul requête tu pourra traiter toutes les données de tes différentes tables.

Seulement si ces données sont déjà stockées en BDD ^^

EDIT : Ta requête est syntaxiquement fausse :
Code :
1
2
INSERT INTO fiche_champs (id_fiche, id_champs, id_champs_value, string_valeur, num_valeur)
VALUES( ( SELECT id_fiche FROM fiche_champs WHERE id_champs_value=2027 ) , 225, 2030, 'LOURD', 5);
Attention aux parenthèses tu avait fermé la parenthèse du VALUES avec celle du SELECT.
Exia93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2012, 11h48   #3
Kalram
Invité de passage
 
Homme
Webmaster
Inscription : février 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre (Centre)

Informations professionnelles :
Activité : Webmaster
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2012
Messages : 5
Points : 0
Points : 0
Pour préciser le contexte, les modifications que je fais sont manuelles, à partir de PHPMyAdmin. Tout se passe dans la même table, fiche_champs

Les données sont pour une partie déjà en base : id_fiche
J'ajoute l'autre partie manuellement à ma requête: id_champs, id_champs_value, string_valeur, num_valeur

En décomposant mon objectif, voici les étapes que j'identifie :

J'aimerais récupérer la liste de toutes les fiches (id_fiche) ayant pour le critère X (id_champs) une valeur Y (id_champs_value).

À partir de cette liste, je veux insérer de nouvelles entrées dans cette même table, sans devoir spécifier manuellement id_fiche.
Une entrée doit être créée automatiquement pour chacune des fiches identifiées, en spécifiant moi-même l'association critère A (id_champs) et valeurs B (id_champs_value).


Par contre je n'ai pas de colonne catégorie de poids, cela correspond dans mon cas à un critère (id_champ), et Lourd correspond à une valeur (id_champs_value).

Ces critères et valeurs sont eux stockées dans une autre table, certainement pour pouvoir rendre leur modification plus simple via l'interface d'admin.
La table fiche_champs sert juste de liaison entre l'ID d'une fiche, l'ID d'un critère et l'ID de la valeur de ce critère pour résumer.

Merci beaucoup en tout cas, je n'avais pas repéré cette grossière erreur de parenthèse
Kalram est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 13h55   #4
Kalram
Invité de passage
 
Homme
Webmaster
Inscription : février 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre (Centre)

Informations professionnelles :
Activité : Webmaster
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2012
Messages : 5
Points : 0
Points : 0
Comme j'ai l'impression que mon raisonnement n'est pas le bon, quelle serait votre approche pour arriver à l'objectif décrit ?

Je ne cherche pas une requête toute pré-machée mais plutôt un raisonnement logique sur lequel me baser pour avancer
Kalram est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h25.


 
 
 
 
Partenaires

Hébergement Web