Besoin d'aide sur une requete MySQL

Fermé
ISushiz Messages postés 2 Date d'inscription lundi 2 juin 2014 Statut Membre Dernière intervention 3 juin 2014 - Modifié par ISushiz le 2/06/2014 à 15:40
jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 - 3 juin 2014 à 10:14
Bonjour,

Je suis actuellement en stage suite à ma première année de BTS Informatique.

Lors de mon stage on m'a demandé de crée une base de donnée regroupant les données de produits d'un fournisseur, et les données pour les mêmes produits dans mon entreprises.

J'ai donc mit sur MySQL les deux fichiers excel que l'on m'a donné.

J'obtient ceci : http://www.noelshack.com/2014-23-1401716250-entreprise-fournisseur.png

Cette image est un exemple du même produit, dans ma table représentant le fournisseur et dans ma table représentant mon entreprise.

Je vous explique maintenant mon problème, je dois rentrer les poids des produits de la table fournisseur dans la table entreprise. Les seuls liens que j'ai trouver entre les tables sont les codes couleurs que j'ai mis sur l'image.

Le rouge : Peut varier d'un nombre à un seul chiffre jusqu'à 3 chiffres (c'est pour cela qu'il y a 2 "0" avant le 8 dans "prodf_ref")
Le vert : Dans ma table fournisseur le "N" de "prodf_ref" correspond a la première lettre de la couleur du produit qui est définit aussi dans ma table entreprise par "noir" apres le "-" dans "prod_famlib"
Le marron : Dans ma table fournisseur, "001" de "prodf_ref" correspond au "1" de "prod_famlib", sachant que le nombre définissant la Figure peut être un chiffre ou un nombre de 3 chiffre maximum.

Voilà, j'espère que j'ai réussi a m'exprimer clairement, n'hésitez pas à demander des précisions.

Merci pour vos futurs réponses.


2 réponses

jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238
Modifié par jee pee le 2/06/2014 à 17:32
Salut,

Pour le coté pratique, vérification et après jointure, je rajouterai un nouveau champ dans la table entreprise : prodf_ref

Et je l'initialiserais avec un sql de ce type :

update entreprise
set prodf_ref = concat_ws(' ',

lpad(substring(prod_famlib,(instr(prod_famlib,' ')+1),
( (instr(prod_famlib,' - ')) - (instr(prod_famlib,' ')) - 1 )),3,'000'),

lpad(substring(prod_lib,1,(instr(prod_lib,'x')-1)),3,'000'),

upper(substring(prod_famlib,(instr(prod_famlib,' - ')+3),1))

)
 

Si tu n'es pas familier avec les fonctions de chaînes de caractères, tu as intérêt à commencer par le bas (le N) ;-)

C'est une base, car je n'ai pû le verifier (donc les calculs de position, parenthèses peuvent être approximatives) et j'ai utilisé les fonctions de chaine de mysql de cette page car je n'utilise comme sgbd qu'Oracle : http://dev.mysql.com/doc/refman/5.0/fr/string-functions.html

cdlt

        Un étranger, c'est un ami qu'on n'a pas encore rencontré.
1
ISushiz Messages postés 2 Date d'inscription lundi 2 juin 2014 Statut Membre Dernière intervention 3 juin 2014
Modifié par ISushiz le 3/06/2014 à 09:04
Merci pour ta réponse,

Oui j'avais compris que le bas de ton code représenter le N, c'est le seul bout que j'ai compris facilement d'ailleurs ..

Pour le prodf_ref ce champ existe déjà dans ma table fournisseur avec la références du produit pour le fournisseur, donc je pense crée un nouveau champ dans ma table fournisseur pour crée la référence que tu souhaite crée.

Sinon pour la requête moi (et une personne du service informatique)j'avais fais ça (ça ne marche pas mais je pense être sur la bonne voix), j'ai passer toute la journée d'hier à essayer de modifier cette requête pour faire se que je souhaite mais je n'ai réussi à rien ...

SELECT * 
FROM produit, produitfournisseur
WHERE RIGHT(REPEAT('0',3) + LEFT(prod_lib,'1'), 3) = SUBSTRING(prodf_ref, 5, 3)
AND UPPER(SUBSTRING(prod_famlib, (LOCATE('-', prod_famlib) + 2), 1)) = RIGHT(prodf_ref,'1')
AND RIGHT(REPEAT('0',3) + SUBSTRING(prod_famlib, (LOCATE('e', prod_famlib) + 2), (LOCATE('-', prod_famlib) - LOCATE('e', prod_famlib) - 3)), 3) = LEFT(prodf_ref,'3')

Sinon je vais tester se que tu m'a dit mais en créant un nouveau champ, ou en modifiant le champ prodf_ref ?

Merci pour vos futurs réponses : ) !

Edit : Ma requete commence par SELECT comme je voulais juste voir si ça sélectionner les bonnes données avant de modifier la table.

Suite a un test de ce code
update produitfournisseur
set prodf_refcomp = concat_ws(' ',

lpad(substring(prod_famlib,(instr(prod_famlib,' ')+1),
( (instr(prod_famlib,' - ')) - (instr(prod_famlib,' ')) - 1 )),3,'000'),

lpad(substring(prod_lib,1,(instr(prod_lib,'x')-1)),3,'000'),

upper(substring(prod_famlib,(instr(prod_famlib,' - ')+3),1))

)

J'obtiens une erreur : #1054 - Unknown column 'prod_famlib' in 'field list'.

Je vais essayer de la résoudre tous seul en m'aidant d'internet.
0
jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238
3 juin 2014 à 10:14
Dans l'update il faut peut être enlever les lignes à blanc, elles n'étaient là que pour bien séparer les 3 blocs de la référence. Sous Oracle les lignes à blancs provoqueraient une erreur.

Et tu peux pour avancer pas à pas, traiter les 3 blocs un par un plutôt qu'en totalité.
0