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
FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010FAIRE APPARAITRE L'ONGLET 'DéVELOPPEUR' DANS OFFICE 2010 par neodante
La nouvelle interface d'Office 2010 à amener quelques modifications par rapport à celle de 2007. Certes mineures, ces modifications ont fait disparaître la case à cocher de l'onglet 'Développeur' en première page du panneau du 'bouton Office' (dans Office...
Cliquez pour lire la suite de l'article par neodante [ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1[ASTUCE] PATCH POUR MICROSOFT FORUMS NNTP BRIDGE V1 par pierre
Si vous avez téléchargé comme moi Microsoft Forums NNTP Bridge V1 avant le 11 mars 2010 (voir [Astuce] Disponibilité de Microsoft Forum NNTP Bridge Version 1.0), un problème de date localisée pour les non anglais était présent. Un patch est disponibl...
Cliquez pour lire la suite de l'article par pierre PB LORS DE L'INSTALLATION SHAREPOINT 2010.PB LORS DE L'INSTALLATION SHAREPOINT 2010. par Patrick Guimonet
Lors de l'installation de SharePoint 2010, j'ai rencontré un problème de plantage à l'étape 5 du configuration Wizard. Ca se termine sur cet écran : Et en analysant le fichier de journalisation, on remarque vers la fin des 15000 et quelques lign...
Cliquez pour lire la suite de l'article par Patrick Guimonet [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (2/2) par JeremyJeanson
Après mon précédent article qui attaque les contraintes par la fasse Nord de l'Everest. passons à la seconde possibilité offerte par WF4 pour valider une activité : la metadata . Je vous en ai déjà toucher un ou deux mots. La metadata dans WF4 est un élém...
Cliquez pour lire la suite de l'article par JeremyJeanson [WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2)[WF4] AJOUTER DES CONTRAINTES à UNE ACTIVITé (1/2) par JeremyJeanson
De WF3 à WF4 pas mal de choses on été changées pour faciliter la vie des développeurs, mais certain points peuvent sembler obscures. comme les contraintes. Pour vous guider, je me lance dans une série de deux articles. Ils présenterons deux approches poss...
Cliquez pour lire la suite de l'article par JeremyJeanson
Forum
RE : INDEXRE : INDEX par nhervagault
Cliquez pour lire la suite par nhervagault RE : SQLRE : SQL par nhervagault
Cliquez pour lire la suite par nhervagault INDEXINDEX par crn_c21
Cliquez pour lire la suite par crn_c21 REQUETE D'AJOUTREQUETE D'AJOUT par monikk
Cliquez pour lire la suite par monikk
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|