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 40559 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 décembre 2024 - 3 juin 2014 à 10:14
jee pee Messages postés 40559 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 décembre 2024 - 3 juin 2014 à 10:14
A voir également:
- Besoin d'aide sur une requete MySQL
- Mysql community server - Télécharger - Bases de données
- Le paquet « mysql-server » n'a pas de version susceptible d'être installée ✓ - Forum Debian
- Mysql gratuit ou payant - Forum MySQL
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock' (2) ✓ - Forum Linux / Unix
- Requête sql pix - Forum Python
2 réponses
jee pee
Messages postés
40559
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
17 décembre 2024
9 459
Modifié par jee pee le 2/06/2014 à 17:32
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 :
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é.
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é.
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
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 ...
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
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.
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.
jee pee
Messages postés
40559
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
17 décembre 2024
9 459
3 juin 2014 à 10:14
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é.
Et tu peux pour avancer pas à pas, traiter les 3 blocs un par un plutôt qu'en totalité.