Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 894 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
752 raphael 1
/*
2
Objectif: prendre les observations dont nom_sel_nn est défini
3
(et donc dans laquelles les informations générées sont correctes)
4
et mettre à jour ces dernières à partir de la dernière version du référentiel
882 raphael 5
(bdtfx, bdtxa et isfan).
6
 
7
Pour éviter un maximum de faux-positifs, nous vérifions aussi que la famille
8
est conservée (même dans certains cas celle-ci a légitimement changé) et que
9
la première partie du nom_sel correspond toujours à la première partie du nouveau nom_sci
10
qui serait attribué.
752 raphael 11
 
892 raphael 12
-- la requête --
752 raphael 13
-- SELECT id_observation, b.num_nom, CONCAT(b.nom_sci, ' ', b.auteur), b.num_taxonomique, b.famille
14
SELECT id_observation, nom_ret, nom_ret_nn, nt, c.famille
828 raphael 15
   FROM `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b
752 raphael 16
   WHERE (
882 raphael 17
        nom_sel_nn IS NOT NULL
752 raphael 18
        AND nom_referentiel like 'bdtfx%'
19
        AND nom_sel_nn = num_nom
20
       )
21
   ORDER BY id_observation asc;
892 raphael 22
 
23
 
24
Cependant le nom_sel_nn n'est pas directement le num_num du taxon dont le nom est
25
retenu. Pour cela, une jointure en bdtfx sur num_nom_retenu est nécessaire et c'est
26
ce dernier taxon dont le num_nom est utilisé pour nom_ret_nn.
27
Cependant il peut aussi être vide (si aucun nom_retenu "officiel" n'existe).
28
 
29
Attention, les nom_sel_nn = 0 doivent avoir disparus de cel_obs *AU PRÉALABLE*
30
cf: maj-cleanup-201307.sql
752 raphael 31
*/
32
 
892 raphael 33
 
34
 
35
/* test:
36
   SELECT c.nom_ret_nn, c.nom_ret, b.nom_sci, b.auteur, c.famille, b.famille, c.nt, b.num_taxonomique
37
   FROM  cel_obs c, tb_eflore.bdtfx_v1_01 b
38
   WHERE (
39
        nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
40
        AND nom_referentiel = 'bdtfx'
41
        AND nom_ret_nn = num_nom
42
        AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
43
        AND (c.famille != b.famille OR c.nom_ret != CONCAT(b.nom_sci, ' ', b.auteur) OR c.nt != b.num_taxonomique)
44
       );
45
   = 2 taxons: 75134 et 75468 (changement de nt)
46
*/
47
 
48
-- l'update BDTFX avec nom_sel_nn et nom_ret_nn corrects
828 raphael 49
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b SET
752 raphael 50
       c.nom_ret = CONCAT(b.nom_sci, ' ', b.auteur),
892 raphael 51
       c.nt = b.num_taxonomique,
52
       c.famille = b.famille
53
   WHERE (
54
        nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
55
        AND nom_referentiel = 'bdtfx'
56
        AND nom_ret_nn = num_nom
895 raphael 57
        AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%') -- TODO: bug transferts multiples + mobile.js
58
        AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
892 raphael 59
       );
894 raphael 60
-- 25584
893 raphael 61
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_ret_nn + nom_sel_nn";
892 raphael 62
 
63
/* test:
64
   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
65
   FROM  cel_obs c, tb_eflore.bdtfx_v1_01 b, tb_eflore.bdtfx_v1_01 bLAST
66
   WHERE (
67
         bLAST.num_nom = b.num_nom_retenu
68
         AND nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0 AND nom_referentiel = 'bdtfx'
69
         AND nom_ret_nn = bLAST.num_nom
70
         AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
71
         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)
72
   );
73
*/
74
 
75
-- l'update BDTFX avec nom_sel_nn seul
76
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b, `BASESOURCE`.`TABLEBDTFX` b_nom_ret SET
77
       c.nom_ret = CONCAT(b_nom_ret.nom_sci, ' ', b_nom_ret.auteur),
894 raphael 78
       c.nom_ret_nn = b_nom_ret.num_nom,
752 raphael 79
       c.nt = b.num_taxonomique,
895 raphael 80
       c.famille = b.famille,
81
       c.date_modification = NOW
752 raphael 82
   WHERE (
892 raphael 83
        b_nom_ret.num_nom = b.num_nom_retenu
84
        AND nom_sel_nn IS NOT NULL
882 raphael 85
        AND nom_referentiel = 'bdtfx'
892 raphael 86
        AND nom_sel_nn = b.num_nom
895 raphael 87
        AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%') -- TODO: bug transferts multiples + mobile.js
892 raphael 88
        AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
895 raphael 89
        AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(b.nom_sci, ' ', 1)
752 raphael 90
       );
895 raphael 91
-- 26369 avec indirection num_nom_retenu
893 raphael 92
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_sel_nn";
754 raphael 93
 
760 raphael 94
 
895 raphael 95
 
96
 
97
 
98
 
99
 
100
 
101
-- l'update BDTXA avec nom_sel_nn et nom_ret_nn corrects
828 raphael 102
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a SET
754 raphael 103
       c.nom_ret = CONCAT(a.nom_sci, ' ', a.auteur),
892 raphael 104
       c.nt = a.num_tax,
105
       c.famille = a.famille
106
   WHERE (
107
        nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
108
        AND nom_referentiel = 'bdtxa'
109
        AND nom_ret_nn = num_nom
110
        AND (LOWER(c.famille) = LOWER(a.famille) OR c.famille IS NULL)
111
       );
894 raphael 112
-- 2
893 raphael 113
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_ret_nn + nom_sel_nn";
892 raphael 114
 
115
-- l'update BDTXA avec nom_sel_nn seul
893 raphael 116
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a, `BASESOURCE`.`TABLEBDTXA` a_nom_ret SET
117
       c.nom_ret = CONCAT(a_nom_ret.nom_sci, ' ', a_nom_ret.auteur),
894 raphael 118
       c.nom_ret_nn = a_nom_ret.num_nom,
754 raphael 119
       c.nt = a.num_tax,
895 raphael 120
       c.famille = a.famille,
121
       c.date_modification = NOW
754 raphael 122
   WHERE (
893 raphael 123
        a_nom_ret.num_nom = a.num_nom_retenu
124
        AND nom_sel_nn IS NOT NULL
882 raphael 125
        AND nom_referentiel = 'bdtxa'
893 raphael 126
        AND nom_sel_nn = a.num_nom
892 raphael 127
        AND (LOWER(c.famille) = LOWER(a.famille) OR c.famille IS NULL)
895 raphael 128
        AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(a.nom_sci, ' ', 1)
754 raphael 129
       );
894 raphael 130
-- 49 avec les restrictions sur famille et SUBSTRING_INDEX()
893 raphael 131
-- 48 sans les restrictions sur famille et SUBSTRING_INDEX()
132
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_sel_nn";
760 raphael 133
 
895 raphael 134
 
135
 
136
 
137
 
138
 
139
 
892 raphael 140
-- l'update ISFAN avec nom_sel_nn et nom_ret_nn corrects  --
882 raphael 141
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i SET
142
       c.nom_ret = CONCAT(i.nom_sci, ' ', i.auteur),
892 raphael 143
       c.nt = i.num_taxonomique,
144
       c.famille = i.famille
145
   WHERE (
146
        nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
147
        AND nom_referentiel = 'isfan'
148
        AND nom_ret_nn = num_nom
149
        AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
150
       );
894 raphael 151
-- 2 ou 0
893 raphael 152
SELECT ROW_COUNT() AS "ISFAN upd après correction sur nom_ret_nn + nom_sel_nn";
892 raphael 153
 
154
-- l'update ISFAN avec nom_sel_nn seul
893 raphael 155
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i, `BASESOURCE`.`TABLEISFAN` i_nom_ret SET
156
       c.nom_ret = CONCAT(i_nom_ret.nom_sci, ' ', i_nom_ret.auteur),
894 raphael 157
       c.nom_ret_nn = IF(i_nom_ret.num_nom=0,NULL,i_nom_ret.num_nom),
882 raphael 158
       c.nt = i.num_taxonomique,
895 raphael 159
       c.famille = i.famille,
160
       c.date_modification = NOW
760 raphael 161
   WHERE (
893 raphael 162
        i_nom_ret.num_nom = i.num_nom_retenu
163
        AND nom_sel_nn IS NOT NULL
882 raphael 164
        AND nom_referentiel = 'isfan'
893 raphael 165
        AND nom_sel_nn = i.num_nom
892 raphael 166
        AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
760 raphael 167
       );
893 raphael 168
-- 0
169
SELECT ROW_COUNT() AS "ISFAN upd après correction sur nom_sel_nn";
760 raphael 170
 
171
/*
172
Pour observer les différences:
173
wdiff -w '$(tput bold;tput setaf 1)' -x '$(tput sgr0)' -y '$(tput bold;tput setaf 2)' -z '$(tput sgr0)'  pre.log post.log | \
174
      ansi2html.sh --palette=solarized | \
175
      sed '/^[0-9]/{/span/!d}' > diff.html
176
 
177
# extract les familles ayant changé: sed '/^[0-9]/{/<\/span>$/!d}'
178
# lowercase toutes les familles: awk '{ NF=tolower($NF); print }'
179
 
180
 
181
# filtre sed: changements de famille "normaux"
182
/aceraceae.*sapindaceae/d
183
/scrophulariaceae.*plantaginaceae/d
184
/globulariaceae.*plantaginaceae/d
185
/Famille inconnue.*null/d
186
 
187
# changement "anormaux"
188
/rosaceae.*caprifoliaceae/d
189
/valerianaceae.*caprifoliaceae/d
190
*/