Accueil > Forum > > > > Boucler sur deux tables
Boucler sur deux tables
vendredi 10 avril 2009 à 11:59:35 |
Boucler sur deux tables

XtazyMushroom
|
Bonjour j'ai un petit probleme pour executer une boucle sur deux tables. Je m'explique J'ai une table 1 et une table 2: Table 1 id(char) valeur 334345 0 336456 0 325645 0 Et une table 2 id valeur 3256 8 336 5 33 4 Donc je voudrai recuperer la valeur id de la table 1 et la tester avec les valeurs de la table 2. Donc faire une boucle sur les 3 premiers chiffre. Je voulais faire donc une soustraction de chaine donc enlever les x valeurs de fin pour recuperer les 4 (taille max des id de ma table 2) premiers chiffres. Tester les 4 premiers chiffres si ils correspondent a une valeur de la table 2 affecter la variable dans la table 1, sinon decrementer et tester avec les 3 (taille max - 1) et ainsi de suite jusqu'a deux... Mais quelques problemes avec ma boucle while! Quelqu'un aurait une idee?
|
|
vendredi 10 avril 2009 à 12:03:44 |
Re : Boucler sur deux tables

XtazyMushroom
|
Bonjour j'ai un petit probleme pour executer une boucle sur deux tables. Je m'explique J'ai une table 1 et une table 2:
Table 1
id(char) valeur
334345 0
336456 0
325645 0
Et une table 2
id valeur
3256 8
336 5
33 4
Donc je voudrai recuperer la valeur id de la table 1 et la tester avec les valeurs de la table 2. Donc faire une boucle sur les 3 premiers chiffre. Je voulais faire donc une soustraction de chaine donc enlever les x valeurs de fin pour recuperer les 4 (taille max des id de ma table 2) premiers chiffres.
Tester les 4 premiers chiffres si ils correspondent a une valeur de la table 2 affecter la variable dans la table 1, sinon decrementer et tester avec les 3 (taille max - 1) et ainsi de suite jusqu'a deux... Mais quelques problemes avec ma boucle while! Quelqu'un aurait une idee?
|
|
vendredi 10 avril 2009 à 14:21:09 |
Re : Boucler sur deux tables

crn_c21
|
Donne nous une idée de ce que tuas fait ce sera plus simple ainsi que le type des données de tes 2 tables
|
|
mardi 14 avril 2009 à 08:50:09 |
Re : Boucler sur deux tables

XtazyMushroom
|
Grossomodo j'ai deux tables:
Table 1:test
id(char(80)) valeur(INT)
334345 0
336456 0
325645 0
Et une table 2:prefix
id(char(80)) valeur(INT)
3256 8
336 5
33 4
Avec un curseur je veux parcourir chaque ligne de la table 1. Pour chaque ligne recuperer les 4 premiers chiffres. Ensuite si ces 4 premiers chiffre formant le nombre X est un champs de table 2 je met la valeur de X de la table 2 dans la table 1.
Pour le moment j'ai ca: Mais mon curseur passe bien de ligne en ligne mais je n'arrive pas a interpreter les valeurs des champs de la ligne de la table1. La boucle while je lai teste sur une autre table...
delimiter |
DROP PROCEDURE IF EXISTS prefixe;
CREATE PROCEDURE prefixe()
BEGIN
DECLARE num, tronc CHAR(80) DEFAULT '';
DECLARE i INT DEFAULT 4;
DECLARE done, x INT DEFAULT 0;
DECLARE CPT_ID INT;
DECLARE curs CURSOR FOR SELECT dst FROM test WHERE cout IS NULL;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN curs;
REPEAT
FETCH curs INTO CPT_ID;
IF NOT done THEN
ins_while:WHILE i > 2 DO
SET tronc = (SELECT LEFT(CPT_ID,i)); -- ICI EST MON ERREUR CPT_ID = reference mais pas valeur du champs...
SELECT count(*) INTO x
FROM prefixe WHERE dst LIKE tronc; -- DONC NE RENTRE JAMAIS LA :(
IF (x = 0) THEN
SET i = i - 1;
ELSE
UPDATE test SET cout=7777 WHERE dst=num;
LEAVE ins_while;
END IF;
END WHILE;
END IF;
UNTIL done END REPEAT;
CLOSE curs;
END|
Si quelqu'un a une idee SVP
|
|
mardi 14 avril 2009 à 09:06:00 |
Re : Boucler sur deux tables

XtazyMushroom
|
Ah oui et j'ai deja teste le DECLARE CPT_ID CHAR(80)
|
|
mardi 14 avril 2009 à 09:58:29 |
Re : Boucler sur deux tables

XtazyMushroom
|
indete excusez moi:
delimiter |
DROP PROCEDURE IF EXISTS prefixe;
CREATE PROCEDURE prefixe()
BEGIN
DECLARE num, tronc CHAR(80) DEFAULT '';
DECLARE i INT DEFAULT 9;
DECLARE done, x INT DEFAULT 0;
DECLARE CPT_ID INT;
DECLARE curs CURSOR FOR SELECT dst FROM test;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN curs;
REPEAT
FETCH curs INTO CPT_ID;
IF NOT done THEN
ins_while:WHILE i > 2 DO
SET tronc = (SELECT LEFT(CPT_ID,i));
INSERT INTO test (dst, cout) VALUES (dst,i);
SELECT count(*) INTO x
FROM prefixe WHERE dst LIKE tronc;
IF (x = 0) THEN
SET i = i - 1;
ELSE
UPDATE test SET cout=7777 WHERE dst=num;
LEAVE ins_while;
END IF;
END WHILE;
END IF;
UNTIL done END REPEAT;
CLOSE curs;
END|
|
|
mardi 14 avril 2009 à 09:59:49 |
Re : Boucler sur deux tables

aieeeuuuuu
|
bonjour
pourquoi ne pas faire ça juste en une requête, plutôt que de passer par un curseur ?
UPDATE Table1 T1 SET Valeur = COALESCE( SELECT Valeur From Table2 WHERE T2 WHERE T2.id = (LEFT(T1.id, 4), SELECT Valeur From Table2 WHERE T2 WHERE T2.id = (LEFT(T1.id, 3), SELECT Valeur From Table2 WHERE T2 WHERE T2.id = (LEFT(T1.id, 2), T1.Valeur )
|
|
mardi 14 avril 2009 à 10:04:22 |
Re : Boucler sur deux tables

XtazyMushroom
|
Par exemple:
Si on a 00336 on a un prefixe valide donc on a un prix par appel (un cout)
Si on a un 0033 c'est un prix inferieur
Si je fais cette requete il va d'abord appliquer un cout pour 00336 puis appliquer un cout pour 0033
|
|
mardi 14 avril 2009 à 12:02:24 |
Re : Boucler sur deux tables

aieeeuuuuu
|
Re,
non, avec ma méthode il ne devrait pas faire ca, ou alors je me suis trompé.
il devrait prendre le premiere resultat non NULL trouvé (fonction coalesce)
as-tu essayé ?
|
|
mardi 14 avril 2009 à 12:25:31 |
Re : Boucler sur deux tables

XtazyMushroom
|
Ok merci j'ai teste avec ca:
CREATE TABLE test (
dst varchar(80) NOT NULL default '',
duration int(11) NOT NULL default '0',
cout int(11) NULL);
INSERT INTO test (dst, duration) VALUES ('0033668711311', 12);
INSERT INTO test (dst, duration) VALUES ('0033666724269', 32);
INSERT INTO test (dst, duration, cout) VALUES ('0033666724269', 32, 5);
INSERT INTO test (dst, duration) VALUES ('0033466724269', 32);
-----------------
CREATE TABLE prefixe (
dst varchar(80) NOT NULL default '',
cout int(11) NOT NULL default '0');
INSERT INTO prefixe (dst, cout) VALUES ('00336', 10);
INSERT INTO prefixe (dst, cout) VALUES ('0033', 5);
------------------
qui me donne ca
+---------------+----------+------+
| dst | duration | cout |
+---------------+----------+------+
| 0033668711311 | 12 | NULL |
| 0033666724269 | 32 | NULL |
| 0033666724269 | 32 | 5 |
| 0033466724269 | 32 | NULL |
+---------------+----------+------+
et
+-------+------+
| dst | cout |
+-------+------+
| 00336 | 10 |
| 0033 | 5 |
+-------+------+
-----------------
Et t'as requete:
UPDATE TABLE test
SET cout = COALESCE(
SELECT cout From prefixe WHERE prefixe.dst = (LEFT(test.dst, 4)),
SELECT cout From prefixe WHERE prefixe.dst = (LEFT(test.dst, 3)),
test.cout
)
donne ca:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE test
SET cout = COALESCE(
SELECT cout From prefixe WHERE prefixe.dst =' at line 1
:D :D :D :D
Je regarde ou est mon erreur mais un peu fatigue si jamais ca te saute aux yeux! ;)
|
|
Cette discussion est classée dans : boucle, table, valeur, id, tables
Répondre à ce message
Sujets en rapport avec ce message
Dépendance de tables SQL [ par toutgreg ]
Bonjour, Je suis entrain de faire l'architecture de ma base SQL et je bloque sur une dépendance de table. Pour résumer, j'ai 3 tables et je cherche à
Choix de valeur par défault n+1 [ par Billybobbonnet ]
Bonjour à tous!Premier message sur ce forum et je vous salue tous à cette occasion.J'ai une BDD mySQL dans laquelle j'ai une table qui répertorie des
Requête qui boucle sur elle même [ par spyro666 ]
Bonjour, j'aurais besoin d'une information : Comment puis-je faire une requête qui boucle sur elle même avec mysql4 ? Est au moins possible ou faut-il
Inserer des données [ par JALEO WAHRANI ]
Bonjour à tous,je souhaiterais inserer des données dans 2 tables à la fois.On a d'un côté la table t_personnes(id, nom, prenom, no_insee)et de l'a
Besoin d'aide avecUPDATE et BOUCLE [ par johann36 ]
Bonjour,J'ai un gros soucis et je bloque dessus depuis ce matin sans trouver la réponse.J'essaie de faire une boucle avec une requête UPDATE, je m'exp
MySQL jonction/fusion/union vers une table tierce [ par pcerne ]
Bonjour, Petit schéma explicatif : J'ai une table A id int nom_id char(30) prenom_id char(30) une table B id
DEFINIR UNE CONTRAINTE D'UNICITE [ par issousam ]
Bonjour,Je m'adresse à vous car je debute en langage SQL et j'ai un probleme au niveau des contarintes d'unicité que je veux definir au sein des table
Conception de BDD: relation n-n [ par leica69 ]
Bonjour, je souhaiterais concevoir une BDD mais avant d'attaquer j'aurais une question à vous poser. En simplifiant, voici ma situation: Je veux mettr
Comparaison [ par romainbisson ]
Salut,Je souhaite comparer deux tables A et B ou le champ C existe dans les deux tables, mais je veux que C soit aboslument egal dans les deux tables
Récupérer l'id d'une requête et utiliser cette valeur dans une autre requête [ par therainbow3 ]
Bonjour, Je suis entrain de concevoir un programme en C# où je dois créer des requêtes SQL suivant les données du client qui seront par la suite pouss
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Xavier Moreels et Julien Bakmezdjian Ce sujet est lié au partage des applications comme services dans SharePoint 2010, ceci représente la possibilité de créer sa propre application qui sera utilisable comme ceux en standard : Search...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Etienne Lacour Cette session a commencé par un rappel de la gestion de contenu et surtout une résumé des points ayant été amélioré avec 2010. Accompagné d'un point sur le cycle de vie des documents. Un rappel du fonctionnement de S...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUXTECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUX par ROMELARD Fabrice
Animé par: Olivier Lepeltier et Karim Manar Cette session commence par la présentation du concept de réseau social, mais surtout de la particularité de du réseau social dans une entreprise. La vision du réseau social est donc une extension du MyS...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéSTECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéS par ROMELARD Fabrice
Animé par: Karim Manar et Laurent Beaudouin Cette session a pour but de revenir sur ce qu'est SharePoint globalement, mais aussi de voir les évolutions liées avec l'avènement de la version 2010. A partir de la marguerite de...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE LUNDITECHDAYS PARIS 2010 : PLEINIèRE LUNDI par ROMELARD Fabrice
Comme chaque année, c'est le grand rassemblement autour des technologies Microsoft qui se déroule donc à Paris au Palais des Congrès. Cette année est riche pour Microsoft en terme de livraison produit, paris l...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
PROCEDURE MYSQLPROCEDURE MYSQL par gearmat
Cliquez pour lire la suite par gearmat
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|