Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 776 → Rev 777

/trunk/scripts/modules/cel/fix-utilisateur-32.sql
New file
0,0 → 1,10
-- corriger les addresses erronées:
-- SELECT distinct ce_utilisateur FROM tb_cel.cel_obs WHERE LENGTH(ce_utilisateur) = 32 AND ce_utilisateur LIKE '%@%' AND ce_utilisateur NOT REGEXP '\.(fr|com)$';
 
ALTER TABLE tb_cel.cel_obs MODIFY ce_utilisateur VARCHAR(255) NOT NULL;
 
UPDATE tb_cel.cel_obs SET ce_utilisateur = CONCAT(SUBSTRING_INDEX(ce_utilisateur,'@', 1), '@apprenti.isa-lille.fr') WHERE ce_utilisateur LIKE '%@apprenti.isa-%';
UPDATE tb_cel.cel_obs SET ce_utilisateur = 'amardeilh.michel@club-internet.fr' WHERE ce_utilisateur = 'amardeilh.michel@club-internet.f';
UPDATE tb_cel.cel_obs SET ce_utilisateur = 'claude.figureau.plantnet@gmail.com' WHERE ce_utilisateur = 'claude.figureau.plantnet@gmail.c';
UPDATE tb_cel.cel_obs SET ce_utilisateur = 'francoise.delachaussee@dbmail.com' WHERE ce_utilisateur = 'francoise.delachaussee@dbmail.co';
UPDATE tb_cel.cel_obs SET ce_utilisateur = 'lucie.boust@proxalys-environnement.com' WHERE ce_utilisateur = 'lucie.boust@proxalys-environneme';
/trunk/scripts/modules/cel/maj-struct-201307.sql
5,11 → 5,3
 
-- dépot "cel", r1739
CREATE INDEX nom_referentiel ON cel_obs (`nom_referentiel`(5));
 
 
-- TODO: créer une clef unique sur (id_utilisateur, ordre)
-- suppress dup:
-- SELECT ce_utilisateur, ordre FROM cel_obs GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1;
-- >= 115 au 22/07/2013
 
-- CREATE UNIQUE INDEX couple_user_ordre ON tb_cel.cel_obs(ce_utilisateur, ordre);
/trunk/scripts/modules/cel/dedup-ordre-201307.sql
New file
0,0 → 1,92
-- suppress dup:
-- >= 115 au 22/07/2013
-- mysql -N <<<"SELECT distinct ce_utilisateur FROM cel_obs GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1;" > ordre-dup.txt
 
DROP FUNCTION IF EXISTS next_ordre;
DROP PROCEDURE IF EXISTS ordre_need_update;
DROP PROCEDURE IF EXISTS update_ordre_user;
DROP PROCEDURE IF EXISTS update_ordre_users;
 
DELIMITER |
 
CREATE FUNCTION next_ordre( s1 VARCHAR(255) )
RETURNS INT
NOT DETERMINISTIC
BEGIN
DECLARE c INT;
SET c = (SELECT MAX(ordre) + 1 FROM tb_cel.cel_obs where ce_utilisateur = s1);
RETURN c;
END
|
-- SELECT next_ordre("vincent.vuillermoz@apprenti.isa-lille.fr");
 
CREATE PROCEDURE ordre_need_update(IN _s1 VARCHAR(255), OUT _ordre INT, OUT _c INT, OUT _min_obs INT)
BEGIN
SELECT ordre, count(ordre), MIN(id_observation) INTO _ordre, _c, _min_obs FROM tb_cel.cel_obs WHERE ce_utilisateur = _s1 GROUP BY ordre HAVING COUNT(ordre) > 1 LIMIT 1;
END
|
-- SELECT ordre_need_update("vincent.vuillermoz@apprenti.isa-lille.fr");
 
CREATE PROCEDURE update_ordre_user(IN _s1 VARCHAR(255))
BEGIN
DECLARE obs_match int default -1;
CALL ordre_need_update(_s1, @o, @c, @minobs);
-- pour chaque ordre dupliqué
WHILE @o IS NOT NULL DO
SELECT CONCAT(" ", @o) as " ordre", @c as "(count/doublons)";
-- SELECT id_observation FROM tb_cel.cel_obs WHERE ce_utilisateur = _s1 AND ordre = @o AND id_observation != @minobs;
-- pour chaque obs concernée, exceptée la première, on met à jour l'ordre,
-- en utilisant next_ordre()
WHILE obs_match != 0 DO
-- SELECT CONCAT("== do update on", @o);
UPDATE tb_cel.cel_obs SET ordre = next_ordre(_s1)
WHERE ce_utilisateur = _s1 AND ordre = @o AND id_observation != @minobs LIMIT 1;
SELECT ROW_COUNT() into obs_match;
-- SELECT @o, obs_match;
END WHILE;
-- toutes les observations dupliquées pour l'ordre @o ont été mises à jour
-- un nouvel ordre à mettre à jour va être obtenu par ordre_need_update()
-- dont nous restaurons obs_match à une valeur qui n'empêche pas la boucle
-- contenant l'UPDATE
SELECT -1 into obs_match;
CALL ordre_need_update(_s1, @o, @c, @minobs);
-- SELECT "====X", @o, @c;
END WHILE;
END
|
-- CALL update_ordre_user("vincent.vuillermoz@apprenti.isa-lille.fr");
 
 
CREATE PROCEDURE update_ordre_users()
BEGIN
DECLARE _nom VARCHAR(255);
DECLARE subst INT DEFAULT 0;
DECLARE done INT DEFAULT 1;
 
-- temp table
CREATE TEMPORARY TABLE IF NOT EXISTS _temp_users (ce_utilisateur VARCHAR(255)) ENGINE=MEMORY AS \
( SELECT DISTINCT ce_utilisateur FROM cel_obs WHERE ce_utilisateur != ''
GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 );
 
SELECT COUNT(*) INTO done FROM _temp_users;
-- la requête principale de sélection des utilisateurs à mettre à jour
WHILE done > 0 DO
SELECT ce_utilisateur INTO _nom FROM _temp_users LIMIT 1;
SELECT _nom AS "utilisateur en mise à jour:";
CALL update_ordre_user(_nom);
SET subst = subst + 1;
DELETE FROM _temp_users WHERE ce_utilisateur = _nom;
SELECT COUNT(*) INTO done FROM _temp_users;
END WHILE;
SELECT subst AS "utilisateurs mis à jour";
END
|
 
DELIMITER ;
 
 
CALL update_ordre_users();
 
 
-- clef unique sur (id_utilisateur, ordre)
CREATE UNIQUE INDEX couple_user_ordre ON tb_cel.cel_obs(ce_utilisateur, ordre);
/trunk/scripts/modules/cel/maj-cleanup-201307.sql
30,3 → 30,6
-- problème n°3: backslashes + newline: 90 + 217 obs
UPDATE cel_obs SET commentaire = REPLACE(commentaire, "\n\\\'", "'");
UPDATE cel_obs SET commentaire = REPLACE(commentaire, "\\\'", "'");
 
-- problème n°4: ce_zone_geo inutile: 57802 obs
UPDATE cel_obs SET ce_zone_geo = NULL WHERE ce_zone_geo = 'INSEE-C:';
/trunk/scripts/modules/cel/A_LIRE.txt
11,16 → 11,20
1) maj-cleanup-201307.sql
uniformisation des données (lon/lat, date, ...)
 
2) TODO: maj-nom-ret.sql
2) fix-utilisateur-32.sql
 
3) dedup-ordre-201307.sql
 
4) TODO: maj-nom-ret.sql
TODO (pas sur) MAJ du référentiel pour les observation ayant un nom_ret_nn
 
3) maj-referentiel-201307.sql
5) maj-referentiel-201307.sql
MAJ du référentiel pour les observation ayant un nom_ret_nn
 
4) maj-referentiel-und-201307.sql
6) maj-referentiel-und-201307.sql
MAJ du référentiel pour les observation n'ayant pas de nom_ret_nn (tentative de détermination par nom)
 
5) referonosaure.sql
7) referonosaure.sql
MAJ des observations (valides) avec les nouvelles données générées, à partir de bdtfx/bdtxa