Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 882 Rev 892
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
    -- the following fails (http://dba.stackexchange.com/questions/48231 ?)
68
    -- the following fails, pas d'index (see EXPLAIN + http://dba.stackexchange.com/questions/48231 ?)
-
 
69
    -- ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 );
-
 
70
    -- mais celle-ci fonctionne, car l'ordre du GROUP BY correspond à l'INDEX [id_obs] : 16 secondes
-
 
71
    ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ordre, ce_utilisateur HAVING COUNT(1) > 1 );
69
    -- ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 );
72
    -- alternativement, comme solution de replis:
70
    ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur IN \
73
    -- ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur IN \
Line 71... Line 74...
71
      (SELECT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(1) > 1) );
74
    --   (SELECT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(1) > 1) );
72
 
75
 
73
    SELECT COUNT(*) INTO done FROM _temp_users;
76
    SELECT COUNT(*) INTO done FROM _temp_users;
74
    -- la requête principale de sélection des utilisateurs à mettre à jour
77
    -- la requête principale de sélection des utilisateurs à mettre à jour
Line 96... Line 99...
96
DROP PROCEDURE IF EXISTS update_ordre_users;
99
DROP PROCEDURE IF EXISTS update_ordre_users;
Line 97... Line 100...
97
 
100
 
98
-- clef unique sur (id_utilisateur, ordre)
101
-- clef unique sur (id_utilisateur, ordre)
99
-- [mais seulement si on a dédupliqué TOUS les utilisateurs, y compris l'utilisateur ''
102
-- [mais seulement si on a dédupliqué TOUS les utilisateurs, y compris l'utilisateur ''
-
 
103
-- à voir aussi: maj-hash-id-obs-migr.sql]
100
-- à voir aussi: maj-hash-id-obs-migr.sql]
104
DROP INDEX `id_obs` ON `BASEEDIT`.`cel_obs`;