Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 895 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 895 Rev 896
Line 1... Line 1...
1
/*
1
/*
-
 
2
 
2
Objectif: prendre les observations dont nom_sel_nn est défini
3
 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 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
5
 et mettre à jour ces dernières à partir de la dernière version du référentiel
5
(bdtfx, bdtxa et isfan).
6
 (bdtfx, bdtxa et isfan).
6
 
7
 
7
Pour éviter un maximum de faux-positifs, nous vérifions aussi que la famille
8
 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
 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
 la première partie du nom_sel correspond toujours à la première partie du nouveau nom_sci
10
qui serait attribué.
11
 qui serait attribué.
Line 11... Line 12...
11
 
12
 
12
-- la requête --
13
-- la requête --
13
-- SELECT id_observation, b.num_nom, CONCAT(b.nom_sci, ' ', b.auteur), b.num_taxonomique, b.famille
14
-- 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
15
SELECT id_observation, nom_ret, nom_ret_nn, nt, c.famille
Line 19... Line 20...
19
        AND nom_sel_nn = num_nom
20
        AND nom_sel_nn = num_nom
20
       )
21
       )
21
   ORDER BY id_observation asc;
22
   ORDER BY id_observation asc;
Line 22... Line 23...
22
 
23
 
23
 
24
 
24
Cependant le nom_sel_nn n'est pas directement le num_num du taxon dont le nom est
25
 Cependant le nom_ret_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
 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).
-
 
29
 
-
 
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
-
 
33
 
-
 
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
Line 26... Line 39...
26
ce dernier taxon dont le num_nom est utilisé pour nom_ret_nn.
39
   de nom de famille incohérent. Pour se prémunir de cela, la famille doit être identique ou presque.
27
Cependant il peut aussi être vide (si aucun nom_retenu "officiel" n'existe).
-
 
28
 
40
 - enfin, la première partie du nom_sel doit matcher exactement la première partie du nom_sci
Line 29... Line 41...
29
Attention, les nom_sel_nn = 0 doivent avoir disparus de cel_obs *AU PRÉALABLE*
41
 
30
cf: maj-cleanup-201307.sql
-
 
31
*/
-
 
32
 
-
 
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
-
 
49
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b SET
-
 
50
       c.nom_ret = CONCAT(b.nom_sci, ' ', b.auteur),
-
 
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
-
 
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)
42
 Consulter referonosaure_fromNomRet.sql pour des informations complémentaires.
59
       );
43
*/
60
-- 25584
44
 
61
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_ret_nn + nom_sel_nn";
45
 
62
 
46
 
Line 76... Line 60...
76
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b, `BASESOURCE`.`TABLEBDTFX` b_nom_ret SET
60
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),
61
       c.nom_ret = CONCAT(b_nom_ret.nom_sci, ' ', b_nom_ret.auteur),
78
       c.nom_ret_nn = b_nom_ret.num_nom,
62
       c.nom_ret_nn = b_nom_ret.num_nom,
79
       c.nt = b.num_taxonomique,
63
       c.nt = b.num_taxonomique,
80
       c.famille = b.famille,
64
       c.famille = b.famille,
81
       c.date_modification = NOW
65
       c.date_modification = NOW() -- a supprimer pour estimer le nombre de changements réel
82
   WHERE (
66
   WHERE (
83
        b_nom_ret.num_nom = b.num_nom_retenu
67
        b_nom_ret.num_nom = b.num_nom_retenu
84
        AND nom_sel_nn IS NOT NULL
68
        AND nom_sel_nn IS NOT NULL
85
        AND nom_referentiel = 'bdtfx'
69
        AND nom_referentiel = 'bdtfx'
86
        AND nom_sel_nn = b.num_nom
70
        AND nom_sel_nn = b.num_nom
-
 
71
        -- TODO: bug transferts multiples + mobile.js
-
 
72
        -- Note: SELECT IF(NULL NOT LIKE "%blah%", 1, 0) : 0
87
        AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%') -- TODO: bug transferts multiples + mobile.js
73
        AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%')
88
        AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
74
        AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL OR c.famille = 'Famille inconnue')
89
        AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(b.nom_sci, ' ', 1)
75
        AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(b.nom_sci, ' ', 1)
90
       );
76
       );
91
-- 26369 avec indirection num_nom_retenu
77
-- 42315 avec indirection num_nom_retenu
92
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_sel_nn";
78
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_sel_nn";
Line 93... Line -...
93
 
-
 
94
 
-
 
95
 
-
 
96
 
-
 
97
 
-
 
98
 
-
 
99
 
-
 
100
 
-
 
101
-- l'update BDTXA avec nom_sel_nn et nom_ret_nn corrects
-
 
102
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a SET
-
 
103
       c.nom_ret = CONCAT(a.nom_sci, ' ', a.auteur),
-
 
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
       );
-
 
112
-- 2
-
 
113
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_ret_nn + nom_sel_nn";
79
 
114
 
80
 
115
-- l'update BDTXA avec nom_sel_nn seul
81
-- l'update BDTXA avec nom_sel_nn seul
116
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a, `BASESOURCE`.`TABLEBDTXA` a_nom_ret SET
82
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),
83
       c.nom_ret = CONCAT(a_nom_ret.nom_sci, ' ', a_nom_ret.auteur),
118
       c.nom_ret_nn = a_nom_ret.num_nom,
84
       c.nom_ret_nn = a_nom_ret.num_nom,
119
       c.nt = a.num_tax,
85
       c.nt = a.num_tax,
120
       c.famille = a.famille,
86
       c.famille = a.famille,
121
       c.date_modification = NOW
87
       c.date_modification = NOW()
122
   WHERE (
88
   WHERE (
123
        a_nom_ret.num_nom = a.num_nom_retenu
89
        a_nom_ret.num_nom = a.num_nom_retenu
124
        AND nom_sel_nn IS NOT NULL
90
        AND nom_sel_nn IS NOT NULL
Line 130... Line 96...
130
-- 49 avec les restrictions sur famille et SUBSTRING_INDEX()
96
-- 49 avec les restrictions sur famille et SUBSTRING_INDEX()
131
-- 48 sans les restrictions sur famille et SUBSTRING_INDEX()
97
-- 48 sans les restrictions sur famille et SUBSTRING_INDEX()
132
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_sel_nn";
98
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_sel_nn";
Line 133... Line -...
133
 
-
 
134
 
-
 
135
 
-
 
136
 
-
 
137
 
-
 
138
 
-
 
139
 
-
 
140
-- l'update ISFAN avec nom_sel_nn et nom_ret_nn corrects  --
-
 
141
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i SET
-
 
142
       c.nom_ret = CONCAT(i.nom_sci, ' ', i.auteur),
-
 
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
       );
-
 
151
-- 2 ou 0
-
 
152
SELECT ROW_COUNT() AS "ISFAN upd après correction sur nom_ret_nn + nom_sel_nn";
99
 
153
 
100
 
154
-- l'update ISFAN avec nom_sel_nn seul
101
-- l'update ISFAN avec nom_sel_nn seul
155
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i, `BASESOURCE`.`TABLEISFAN` i_nom_ret SET
102
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),
103
       c.nom_ret = CONCAT(i_nom_ret.nom_sci, ' ', i_nom_ret.auteur),
157
       c.nom_ret_nn = IF(i_nom_ret.num_nom=0,NULL,i_nom_ret.num_nom),
104
       c.nom_ret_nn = IF(i_nom_ret.num_nom=0,NULL,i_nom_ret.num_nom),
158
       c.nt = i.num_taxonomique,
105
       c.nt = i.num_taxonomique,
159
       c.famille = i.famille,
106
       c.famille = i.famille,
160
       c.date_modification = NOW
107
       c.date_modification = NOW()
161
   WHERE (
108
   WHERE (
162
        i_nom_ret.num_nom = i.num_nom_retenu
109
        i_nom_ret.num_nom = i.num_nom_retenu
163
        AND nom_sel_nn IS NOT NULL
110
        AND nom_sel_nn IS NOT NULL
164
        AND nom_referentiel = 'isfan'
111
        AND nom_referentiel = 'isfan'
165
        AND nom_sel_nn = i.num_nom
112
        AND nom_sel_nn = i.num_nom
166
        AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
113
        AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
167
       );
114
       );
168
-- 0
-
 
169
SELECT ROW_COUNT() AS "ISFAN upd après correction sur nom_sel_nn";
-
 
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
-