Line 1... |
Line 1... |
1 |
-- suppress dup:
|
1 |
-- suppress dup:
|
2 |
-- >= 115 au 22/07/2013
|
2 |
-- >= 115 au 22/07/2013
|
3 |
-- mysql -N <<<"SELECT distinct ce_utilisateur FROM `tb_cel_test`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1;" > ordre-dup.txt
|
3 |
-- mysql -N <<<"SELECT distinct ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1;" > ordre-dup.txt
|
Line 4... |
Line 4... |
4 |
|
4 |
|
5 |
DROP FUNCTION IF EXISTS next_ordre;
|
5 |
DROP FUNCTION IF EXISTS next_ordre;
|
6 |
DROP PROCEDURE IF EXISTS ordre_need_update;
|
6 |
DROP PROCEDURE IF EXISTS ordre_need_update;
|
7 |
DROP PROCEDURE IF EXISTS update_ordre_user;
|
7 |
DROP PROCEDURE IF EXISTS update_ordre_user;
|
Line 12... |
Line 12... |
12 |
CREATE FUNCTION next_ordre( s1 VARCHAR(255) )
|
12 |
CREATE FUNCTION next_ordre( s1 VARCHAR(255) )
|
13 |
RETURNS INT
|
13 |
RETURNS INT
|
14 |
NOT DETERMINISTIC
|
14 |
NOT DETERMINISTIC
|
15 |
BEGIN
|
15 |
BEGIN
|
16 |
DECLARE c INT;
|
16 |
DECLARE c INT;
|
17 |
SET c = (SELECT MAX(ordre) + 1 FROM `tb_cel_test`.`cel_obs` where ce_utilisateur = s1);
|
17 |
SET c = (SELECT MAX(ordre) + 1 FROM `BASEEDIT`.`cel_obs` where ce_utilisateur = s1);
|
18 |
RETURN c;
|
18 |
RETURN c;
|
19 |
END
|
19 |
END
|
20 |
|
|
20 |
|
|
21 |
-- SELECT next_ordre("vincent.vuillermoz@apprenti.isa-lille.fr");
|
21 |
-- SELECT next_ordre("vincent.vuillermoz@apprenti.isa-lille.fr");
|
Line 22... |
Line 22... |
22 |
|
22 |
|
23 |
CREATE PROCEDURE ordre_need_update(IN _s1 VARCHAR(255), OUT _ordre INT, OUT _c INT, OUT _min_obs INT)
|
23 |
CREATE PROCEDURE ordre_need_update(IN _s1 VARCHAR(255), OUT _ordre INT, OUT _c INT, OUT _min_obs INT)
|
24 |
BEGIN
|
24 |
BEGIN
|
25 |
SELECT ordre, count(ordre), MIN(id_observation) INTO _ordre, _c, _min_obs FROM `tb_cel_test`.`cel_obs` WHERE ce_utilisateur = _s1 GROUP BY ordre HAVING COUNT(ordre) > 1 LIMIT 1;
|
25 |
SELECT ordre, count(ordre), MIN(id_observation) INTO _ordre, _c, _min_obs FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur = _s1 GROUP BY ordre HAVING COUNT(ordre) > 1 LIMIT 1;
|
26 |
END
|
26 |
END
|
27 |
|
|
27 |
|
|
Line 28... |
Line 28... |
28 |
-- SELECT ordre_need_update("vincent.vuillermoz@apprenti.isa-lille.fr");
|
28 |
-- SELECT ordre_need_update("vincent.vuillermoz@apprenti.isa-lille.fr");
|
Line 32... |
Line 32... |
32 |
DECLARE obs_match int default -1;
|
32 |
DECLARE obs_match int default -1;
|
33 |
CALL ordre_need_update(_s1, @o, @c, @minobs);
|
33 |
CALL ordre_need_update(_s1, @o, @c, @minobs);
|
34 |
-- pour chaque ordre dupliqué
|
34 |
-- pour chaque ordre dupliqué
|
35 |
WHILE @o IS NOT NULL DO
|
35 |
WHILE @o IS NOT NULL DO
|
36 |
SELECT CONCAT(" ", @o) as " ordre", @c as "(count/doublons)";
|
36 |
SELECT CONCAT(" ", @o) as " ordre", @c as "(count/doublons)";
|
37 |
-- SELECT id_observation FROM `tb_cel_test`.`cel_obs` WHERE ce_utilisateur = _s1 AND ordre = @o AND id_observation != @minobs;
|
37 |
-- SELECT id_observation FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur = _s1 AND ordre = @o AND id_observation != @minobs;
|
38 |
-- pour chaque obs concernée, exceptée la première, on met à jour l'ordre,
|
38 |
-- pour chaque obs concernée, exceptée la première, on met à jour l'ordre,
|
39 |
-- en utilisant next_ordre()
|
39 |
-- en utilisant next_ordre()
|
40 |
WHILE obs_match != 0 DO
|
40 |
WHILE obs_match != 0 DO
|
41 |
-- SELECT CONCAT("== do update on", @o);
|
41 |
-- SELECT CONCAT("== do update on", @o);
|
42 |
UPDATE `tb_cel_test`.`cel_obs` SET ordre = next_ordre(_s1)
|
42 |
UPDATE `BASEEDIT`.`cel_obs` SET ordre = next_ordre(_s1)
|
43 |
WHERE ce_utilisateur = _s1 AND ordre = @o AND id_observation != @minobs LIMIT 1;
|
43 |
WHERE ce_utilisateur = _s1 AND ordre = @o AND id_observation != @minobs LIMIT 1;
|
44 |
SELECT ROW_COUNT() into obs_match;
|
44 |
SELECT ROW_COUNT() into obs_match;
|
45 |
-- SELECT @o, obs_match;
|
45 |
-- SELECT @o, obs_match;
|
46 |
END WHILE;
|
46 |
END WHILE;
|
47 |
-- toutes les observations dupliquées pour l'ordre @o ont été mises à jour
|
47 |
-- toutes les observations dupliquées pour l'ordre @o ont été mises à jour
|
Line 63... |
Line 63... |
63 |
DECLARE subst INT DEFAULT 0;
|
63 |
DECLARE subst INT DEFAULT 0;
|
64 |
DECLARE done INT DEFAULT 1;
|
64 |
DECLARE done INT DEFAULT 1;
|
Line 65... |
Line 65... |
65 |
|
65 |
|
66 |
-- temp table
|
66 |
-- temp table
|
67 |
CREATE TEMPORARY TABLE IF NOT EXISTS _temp_users (ce_utilisateur VARCHAR(255)) ENGINE=MEMORY AS \
|
67 |
CREATE TEMPORARY TABLE IF NOT EXISTS _temp_users (ce_utilisateur VARCHAR(255)) ENGINE=MEMORY AS \
|
68 |
( SELECT DISTINCT ce_utilisateur FROM `tb_cel_test`.`cel_obs`
|
68 |
( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs`
|
Line 69... |
Line 69... |
69 |
GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 );
|
69 |
GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 );
|
70 |
|
70 |
|
71 |
SELECT COUNT(*) INTO done FROM _temp_users;
|
71 |
SELECT COUNT(*) INTO done FROM _temp_users;
|
Line 94... |
Line 94... |
94 |
DROP PROCEDURE IF EXISTS update_ordre_users;
|
94 |
DROP PROCEDURE IF EXISTS update_ordre_users;
|
Line 95... |
Line 95... |
95 |
|
95 |
|
96 |
-- clef unique sur (id_utilisateur, ordre)
|
96 |
-- clef unique sur (id_utilisateur, ordre)
|
97 |
-- [mais seulement si on a dédupliqué TOUS les utilisateurs, y compris l'utilisateur ''
|
97 |
-- [mais seulement si on a dédupliqué TOUS les utilisateurs, y compris l'utilisateur ''
|
98 |
-- à voir aussi: maj-hash-id-obs-migr.sql]
|
98 |
-- à voir aussi: maj-hash-id-obs-migr.sql]
|