Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 818 | Rev 882 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 818 Rev 819
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]