Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 892 Rev 895
Line 62... Line 62...
62
    DECLARE _nom VARCHAR(255);
62
    DECLARE _nom VARCHAR(255);
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
-
 
67
    CREATE TEMPORARY TABLE IF NOT EXISTS _temp_users (ce_utilisateur VARCHAR(255)) ENGINE=MEMORY AS \
66
    -- temp table
68
    -- the following fails, pas d'index (see EXPLAIN + http://dba.stackexchange.com/questions/48231 ?)
67
    -- the following fails, pas d'index (see EXPLAIN + http://dba.stackexchange.com/questions/48231 ?)
-
 
68
    -- ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 );
69
    -- ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 );
69
    IF (SELECT SUBSTR(version(),3,1)) != 5 THEN
-
 
70
       -- mais celle-ci fonctionne, car l'ordre du GROUP BY correspond à l'INDEX [id_obs] : 16 secondes
70
    -- mais celle-ci fonctionne, car l'ordre du GROUP BY correspond à l'INDEX [id_obs] : 16 secondes
71
       CREATE TEMPORARY TABLE IF NOT EXISTS _temp_users (ce_utilisateur VARCHAR(255)) ENGINE=MEMORY AS \
-
 
72
        ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ordre, ce_utilisateur HAVING COUNT(1) > 1 );
71
    ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ordre, ce_utilisateur HAVING COUNT(1) > 1 );
73
    ELSE
-
 
74
        -- alternativement, comme solution de replis (nécessaire pour MariaDB ?):
72
    -- alternativement, comme solution de replis:
75
        CREATE TEMPORARY TABLE IF NOT EXISTS _temp_users (ce_utilisateur VARCHAR(255)) ENGINE=MEMORY AS \
73
    -- ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur IN \
76
        ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur IN \
-
 
77
        (SELECT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(1) > 1) );
Line 74... Line 78...
74
    --   (SELECT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(1) > 1) );
78
    END IF;
75
 
79
 
76
    SELECT COUNT(*) INTO done FROM _temp_users;
80
    SELECT COUNT(*) INTO done FROM _temp_users;
77
    -- la requête principale de sélection des utilisateurs à mettre à jour
81
    -- la requête principale de sélection des utilisateurs à mettre à jour