Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 895 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
752 raphael 1
/*
882 raphael 2
 
896 raphael 3
 Objectif: prendre les observations dont nom_sel_nn est défini
4
 (et donc dans laquelles les informations générées sont correctes)
5
 et mettre à jour ces dernières à partir de la dernière version du référentiel
6
 (bdtfx, bdtxa et isfan).
752 raphael 7
 
896 raphael 8
 Pour éviter un maximum de faux-positifs, nous vérifions aussi que la famille
9
 est conservée (même dans certains cas celle-ci a légitimement changé) et que
10
 la première partie du nom_sel correspond toujours à la première partie du nouveau nom_sci
11
 qui serait attribué.
12
 
892 raphael 13
-- la requête --
752 raphael 14
-- SELECT id_observation, b.num_nom, CONCAT(b.nom_sci, ' ', b.auteur), b.num_taxonomique, b.famille
15
SELECT id_observation, nom_ret, nom_ret_nn, nt, c.famille
828 raphael 16
   FROM `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b
752 raphael 17
   WHERE (
882 raphael 18
        nom_sel_nn IS NOT NULL
752 raphael 19
        AND nom_referentiel like 'bdtfx%'
20
        AND nom_sel_nn = num_nom
21
       )
22
   ORDER BY id_observation asc;
892 raphael 23
 
24
 
896 raphael 25
 Cependant le nom_ret_nn n'est pas directement le num_num du taxon dont le nom est
26
 retenu. Pour cela, une jointure en bdtfx sur num_nom_retenu est nécessaire et c'est
27
 ce dernier taxon dont le num_nom est utilisé pour nom_ret_nn.
28
 Cependant il peut aussi être vide (si aucun nom_retenu "officiel" n'existe).
892 raphael 29
 
896 raphael 30
 Attention, les nom_sel_nn = 0 doivent avoir disparus de cel_obs *AU PRÉALABLE* car le test
31
 n'est pas effectué.
32
 cf: maj-cleanup-201307.sql
752 raphael 33
 
896 raphael 34
 Ici, contrairement à referonosaure_fromNomRet.sql, nous partons du nom_sel en admettant qu'il est
35
 toujours correct et c'est donc sur ce champ que s'effectue la jointure.
36
 Quelques exceptions notables existent cependant:
37
 - certaines observations issues de sauvages sont corrompues, leur nom_sel_nn n'est donc PAS fiable
38
 - il a été remarqué des observations pour lesquelles le nom_sel_nn était corrompu, impliquant une changement
39
   de nom de famille incohérent. Pour se prémunir de cela, la famille doit être identique ou presque.
40
 - enfin, la première partie du nom_sel doit matcher exactement la première partie du nom_sci
892 raphael 41
 
896 raphael 42
 Consulter referonosaure_fromNomRet.sql pour des informations complémentaires.
892 raphael 43
*/
44
 
45
 
896 raphael 46
 
892 raphael 47
/* test:
48
   SELECT c.nom_ret_nn, c.nom_ret, bLAST.num_nom, bLAST.nom_sci, bLAST.auteur, c.famille, bLAST.famille, c.nt, bLAST.num_taxonomique
49
   FROM  cel_obs c, tb_eflore.bdtfx_v1_01 b, tb_eflore.bdtfx_v1_01 bLAST
50
   WHERE (
51
         bLAST.num_nom = b.num_nom_retenu
52
         AND nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0 AND nom_referentiel = 'bdtfx'
53
         AND nom_ret_nn = bLAST.num_nom
54
         AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
55
         AND (c.famille != b.famille OR c.nom_ret != CONCAT(bLAST.nom_sci, ' ', bLAST.auteur) OR c.nt != b.num_taxonomique OR c.nom_ret_nn != bLAST.num_nom)
56
   );
57
*/
58
 
59
-- l'update BDTFX avec nom_sel_nn seul
60
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b, `BASESOURCE`.`TABLEBDTFX` b_nom_ret SET
61
       c.nom_ret = CONCAT(b_nom_ret.nom_sci, ' ', b_nom_ret.auteur),
894 raphael 62
       c.nom_ret_nn = b_nom_ret.num_nom,
752 raphael 63
       c.nt = b.num_taxonomique,
895 raphael 64
       c.famille = b.famille,
896 raphael 65
       c.date_modification = NOW() -- a supprimer pour estimer le nombre de changements réel
752 raphael 66
   WHERE (
892 raphael 67
        b_nom_ret.num_nom = b.num_nom_retenu
68
        AND nom_sel_nn IS NOT NULL
882 raphael 69
        AND nom_referentiel = 'bdtfx'
892 raphael 70
        AND nom_sel_nn = b.num_nom
896 raphael 71
        -- TODO: bug transferts multiples + mobile.js
72
        -- Note: SELECT IF(NULL NOT LIKE "%blah%", 1, 0) : 0
73
        AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%')
74
        AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL OR c.famille = 'Famille inconnue')
895 raphael 75
        AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(b.nom_sci, ' ', 1)
752 raphael 76
       );
896 raphael 77
-- 42315 avec indirection num_nom_retenu
893 raphael 78
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_sel_nn";
754 raphael 79
 
760 raphael 80
 
892 raphael 81
-- l'update BDTXA avec nom_sel_nn seul
893 raphael 82
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a, `BASESOURCE`.`TABLEBDTXA` a_nom_ret SET
83
       c.nom_ret = CONCAT(a_nom_ret.nom_sci, ' ', a_nom_ret.auteur),
894 raphael 84
       c.nom_ret_nn = a_nom_ret.num_nom,
754 raphael 85
       c.nt = a.num_tax,
895 raphael 86
       c.famille = a.famille,
896 raphael 87
       c.date_modification = NOW()
754 raphael 88
   WHERE (
893 raphael 89
        a_nom_ret.num_nom = a.num_nom_retenu
90
        AND nom_sel_nn IS NOT NULL
882 raphael 91
        AND nom_referentiel = 'bdtxa'
893 raphael 92
        AND nom_sel_nn = a.num_nom
892 raphael 93
        AND (LOWER(c.famille) = LOWER(a.famille) OR c.famille IS NULL)
895 raphael 94
        AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(a.nom_sci, ' ', 1)
754 raphael 95
       );
894 raphael 96
-- 49 avec les restrictions sur famille et SUBSTRING_INDEX()
893 raphael 97
-- 48 sans les restrictions sur famille et SUBSTRING_INDEX()
98
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_sel_nn";
760 raphael 99
 
895 raphael 100
 
892 raphael 101
-- l'update ISFAN avec nom_sel_nn seul
893 raphael 102
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i, `BASESOURCE`.`TABLEISFAN` i_nom_ret SET
103
       c.nom_ret = CONCAT(i_nom_ret.nom_sci, ' ', i_nom_ret.auteur),
894 raphael 104
       c.nom_ret_nn = IF(i_nom_ret.num_nom=0,NULL,i_nom_ret.num_nom),
882 raphael 105
       c.nt = i.num_taxonomique,
895 raphael 106
       c.famille = i.famille,
896 raphael 107
       c.date_modification = NOW()
760 raphael 108
   WHERE (
893 raphael 109
        i_nom_ret.num_nom = i.num_nom_retenu
110
        AND nom_sel_nn IS NOT NULL
882 raphael 111
        AND nom_referentiel = 'isfan'
893 raphael 112
        AND nom_sel_nn = i.num_nom
892 raphael 113
        AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
760 raphael 114
       );
893 raphael 115
-- 0
116
SELECT ROW_COUNT() AS "ISFAN upd après correction sur nom_sel_nn";