Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev Author Line No. Line
755 raphael 1
/*
2
Cleanup des observation ayant un nom_ret_nn à 0 (mais un nom_ret défini...):
3
En effet, on peut pour l'instant POSTer $nom_ret, d'où bien souvent nom_sel == nom_ret, cependant nom_ret_nn = 0
4
(pas d'autodétection).
5
Nous pourrions donc les nullifier sans remord, ... mais ...
882 raphael 6
nom_ret_nn == 0 est VALIDE (car bdtfx.num_nom_retenu == 0 est "valide", 3960 taxons sont "orphelins" de nom_retenu)
755 raphael 7
 
8
1) créer un index pour les jointures:
828 raphael 9
CREATE INDEX i_nom_ret ON `BASESOURCE`.`TABLEBDTFX` (`nom_sci`(8))
755 raphael 10
2) regarder les num_nom_ret orphelins de taxon en BDTFX:
828 raphael 11
SELECT * FROM `BASESOURCE`.`TABLEBDTFX` WHERE num_nom_retenu = 0; # 3960
821 raphael 12
3) regarder les num_nom_ret orphelins de taxon en BDTXA:
828 raphael 13
SELECT * FROM `BASESOURCE`.`TABLEBDTXA` WHERE num_nom_retenu = 0; # 0
819 raphael 14
4) regarder les orphelins équivalents dans `BASEEDIT`.`cel_obs`:
828 raphael 15
SELECT date_observation, SUBSTRING(nom_sel, 1, 50), nom_ret_nn, nom_ret, b.nom_sci FROM `BASEEDIT`.`cel_obs` c LEFT JOIN `BASESOURCE`.`TABLEBDTFX` b on (c.nom_ret = b.nom_sci) WHERE nom_ret_nn = 0; # 7740
755 raphael 16
 
17
Donc ceux dont le nom_ret à été POSTé manuellement et qui matchent le nom_sci de BDTFX : on les conserve.
882 raphael 18
Mais les autres, qui ont un nom_ret probablement erroné et un nom_ret_nn à 0, on NULLify les données car elles seront théoriquement correctement autoregénérées !
755 raphael 19
 
20
Cela concerne:
882 raphael 21
SELECT date_observation, SUBSTRING(nom_sel, 1, 50), nom_ret_nn, nom_ret, b.nom_sci FROM `BASEEDIT`.`cel_obs` c LEFT JOIN `BASESOURCE`.`TABLEBDTFX` b ON (c.nom_ret = b.nom_sci) WHERE nom_ret_nn = 0
828 raphael 22
 AND c.nom_ret != '' AND id_observation NOT IN ( SELECT id_observation FROM `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b WHERE c.nom_ret = b.nom_sci AND c.nom_ret_nn = 0 );  # 960
755 raphael 23
*/
24
-- D'où la requête :
819 raphael 25
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel_nn = NULL, nom_ret = NULL, nom_ret_nn = NULL, nt = NULL, famille = NULL WHERE id_observation IN
828 raphael 26
( SELECT id_observation FROM `BASEEDIT`.`cel_obs` c LEFT JOIN `BASESOURCE`.`TABLEBDTFX` b on (c.nom_ret = b.nom_sci) WHERE nom_ret_nn = 0
27
 AND c.nom_ret != '' AND id_observation NOT IN ( SELECT id_observation FROM `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b WHERE c.nom_ret = b.nom_sci AND c.nom_ret_nn = 0 ) );
755 raphael 28
 
29
-- TODO
819 raphael 30
-- UPDATE `BASEEDIT`.`cel_obs` SET nom_ret_nn = NULL WHERE nom_ret_nn = 0;
755 raphael 31
 
32
/*
819 raphael 33
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel = NULL, nom_sel_nn = NULL, nom_ret = NULL, nom_ret_nn = NULL, nt = NULL, famille = NULL,
34
	FROM `BASEEDIT`.`cel_obs`
882 raphael 35
	WHERE nom_sel IS NULL AND
755 raphael 36
	(
37
	(nom_ret IS NOT NULL AND nom_ret != '') OR
38
	(nt IS NOT NULL AND nt != 0 AND nt != '') OR
39
	(famille IS NOT NULL AND famille != '')
40
	)
882 raphael 41
 
42
-- pas de test de nullité sur nom_ret_nn qui peut légitimement être NULL
43
	(nom_ret_nn IS NOT NULL AND nom_ret_nn != 0 AND nom_ret_nn != '') OR
755 raphael 44
*/
45