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
Jointures externes compliquées [ par fred02 ]
Bonjour, je tente de faire une requête sql mais sans succès. voici le schéma PERSONNE (#ID,Nom,Prenom) TABLE(#ID,Titre,#PERSONNE) PARTIE(#ID,Date,PE
Plusieurs colonnes ou plusieurs tables ? [ par hotmaskim ]
Bonjour, J'ai une table qui va servir à remplacer un fichier XML faisant un mapping entre un id source et un id destination. Maintenant, l'id sourc
sql:insertion dans 2 tables liées [ par ti7a ]
Bonjour, slt tt le monde bon j'ai deux tables : la table voiture (id_voiture,id_marque ,couleur,ville.............); et la table option (id_option,
sélectionner les enregistrements pour la valeur max d'un champ d'une table liée [ par rlapt ]
Bonjour, Je souhaite faire une requête SQL à partir d'excel, dans une base Access. J'ai deux tables liées par des champs d'index : Table 1 -> Nro
doublons d'une tables [ par yghilas ]
salut à tous; et merçi de m'aider à trouver une solution à mon PBm j'ai une table qui regroupe des livres avec des numeros d'inventaire,il existe des
Problème création table en SQL Server [ par anouar2002 ]
Salut !!! Je veux faire une création de certains tables en SQL Server 2005, il y a toujours un erreur concernant les clés étrangers je suppose qui me
requête sur trois tables [ par cartman29 ]
Bonjour, J'ai une table contenant X qui à plusieurs colonnes dont CS_PERS_PRO. Cette table X se rattache à deux autres tables Y et Z. exemple : tab
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
BESOIN D'UN BIBESOIN D'UN BI par michimichid
Cliquez pour lire la suite par michimichid
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|