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`;
|