/branches/acheb/services/tests/0.1/nvjfl/NvjflNomsVernaTest.php |
---|
135,8 → 135,6 |
$this->assertEquals('Acacia', $retour['resultat']['-880871632']['nom_vernaculaire'], "Le tableau du résultat -880871632 doit contenir un champ 'nom' avec pour valeur 'Acacia'. Voir : $url"); |
$this->assertArrayHasKey('langue.code', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 doit contenir un champ 'langue.code'. Voir : $url"); |
$this->assertEquals('spa', $retour['resultat']['-880871632']['langue.code'], "Le tableau du résultat -880871632 doit contenir un champ 'langue.code' avec pour valeur 'spa'. Voir : $url"); |
$this->assertArrayHasKey('code_langue', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 doit contenir un champ 'code_langue'. Voir : $url"); |
$this->assertEquals('spa', $retour['resultat']['-880871632']['code_langue'], "Le tableau du résultat -880871632 doit contenir un champ 'code_langue' avec pour valeur 'spa'. Voir : $url"); |
$this->assertArrayHasKey('taxon.code', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 doit contenir un champ 'taxon.code'. Voir : $url"); |
$this->assertEquals('bdtfx.nt:30746', $retour['resultat']['-880871632']['taxon.code'], "Le tableau du résultat -880871632 doit contenir un champ 'taxon.code' avec pour valeur 'bdtfx.nt:30746'. Voir : $url"); |
208,7 → 206,7 |
// masque.lg=fra (pour simplement réduire la lourdeur) |
public function testAttributionsOntologiesMultiples() { |
$parametres = [ 'masque.nt' => 1382, 'retour.champs' => 'conseil_emploi,genre', 'masque.lg' => 'fra' ]; |
$url = ServiceEflorePhpUnit::creerUrl('noms-vernaculaires', ['attributions'], $parametres); |
$url = '/nvjfl' . ServiceEflorePhpUnit::creerUrl('noms-vernaculaires', ['attributions'], $parametres); |
$retour = $this->consulterJson('noms-vernaculaires', 'nvjfl', ['attributions'], $parametres); |
// basique: |
219,7 → 217,7 |
// présence champs standards: |
foreach($retour['resultat'] as $k => $e) { |
foreach([ 'id', 'nom_vernaculaire', 'taxon', 'code_langue', /* 'langue.code', 'taxon.code', 'href', */ 'nom_retenu.code', 'num_taxon' ] as $v) { |
foreach([ 'id', 'nom_vernaculaire', 'taxon', /* 'langue.code', 'taxon.code', 'href', */ 'nom_retenu.code', 'num_taxon' ] as $v) { |
$this->assertArrayHasKey($v, $e, "Le json ne contient pas l'attribut \"$v\" pour l'élément \"$k\". Voir : $url"); |
} |
} |
241,7 → 239,7 |
$this->assertEquals('Girasol', $retour['resultat']['-516239805']['nom_vernaculaire'], "L'élément '-516239805' contient une valeur erronée pour l'attribut 'nom_vernaculaire'. Voir : $url"); |
$this->assertEquals('2', $retour['resultat']['-516239805']['num_statut'], "L'élément '-516239805' contient une valeur erronée pour l'attribut 'num_statut'. Voir : $url"); |
// TODO: num_taxon => taxon.code ? |
// TODO: code_langue et num_taxon => langue.code et taxon.code ? |
// absence champs "pseudo"-inattendus |
foreach($retour['resultat'] as $k => $e) { |
foreach([ '_result_ontologies@nvjfl'] as $v) { |
/branches/acheb/services/modules/0.1/nvjfl/NomsVernaculaires.php |
---|
382,11 → 382,11 |
if (!empty($url['suivant'])) { |
$table_retour_json['entete']['href.suivant'] = $url['suivant']; |
} |
foreach ($resultat as &$tab) { |
foreach ($resultat as &$tab) { |
$nnv = $tab['num_nom_vernaculaire']; |
$resultat_json[$nnv]['id'] = $tab['id']; |
$resultat_json[$nnv]['nom_vernaculaire'] = $tab['nom_vernaculaire']; |
$resultat_json[$nnv]['langue.code'] = $resultat_json[$nnv]['code_langue'] = $tab['code_langue']; |
$resultat_json[$nnv]['langue.code'] = $tab['code_langue']; |
$resultat_json[$nnv]['taxon.code'] = 'bdtfx.nt:'.$tab['num_taxon']; |
if ($this->retour_format == 'max') { |
$this->taxons[] = $tab['num_taxon']; // utilisé pour chercher les noms latins plus bas |
/branches/acheb/services/modules/0.1/moissonnage/cartes/SourceDonnees.php |
---|
102,7 → 102,7 |
"FROM {$source}_tapir WHERE ".$this->construireWhereTaxonMoissonnage()." ". |
"AND lieu_station_longitude BETWEEN ".$this->limitesCarte['ouest']." AND ".$this->limitesCarte['est']." ". |
"AND lieu_station_latitude BETWEEN ".$this->limitesCarte['sud']." AND ".$this->limitesCarte['nord']." ". |
"AND Length(lieu_commune_code_insee)=5 ORDER BY lieu_commune_code_insee, date"." -- " . __FILE__ . ":" . __LINE__." ".$_SERVER['REQUEST_URI']; |
"AND Length(lieu_commune_code_insee)=5 ORDER BY lieu_commune_code_insee, date"; |
$stations = $this->bdd->recupererTous($requete); |
$this->rechercherInfosCommune($stations); |
return $stations; |
/branches/acheb/services/configurations/test-sous-conf.sed |
---|
1,3 → 1,3 |
/^url_(service|ontologie)/s/service:eflore:/service-test:eflore:/ |
/^url_(service|ontologie)/s/([^-])service:eflore:0.1/\1test-service:eflore:0.1/ |
/^bdd_nom.*tb_eflore/s|= .*|= tb_eflore_test| |
/^bdd_nom.*tb_cel/s|= .*|= tb_cel_test| |
/branches/acheb/services/configurations/test-conf.sed |
---|
1,4 → 1,4 |
/^serveur.baseAlternativeURL/s|/service:eflore:|service-test:eflore:| |
/^serveur.baseAlternativeURL/s|= .*|= /test-service:eflore:0.1/| |
/^serveur.baseURL/s|= .*|= /eflore-test/services/| |
/^url_base/s|= .*|= "http://www.tela-botanica.org/"| |
/^chemin_base/s|= .*|= /home/telabotap/www/eflore-test/services/| |
/branches/acheb/scripts/modules/baseflor/Baseflor.php |
---|
289,8 → 289,7 |
$requete = "DROP TABLE IF EXISTS baseflor_meta, baseflor_ontologies, ". |
" baseflor_v2012_03_19, ". |
" baseflor_v2012_05_08, baseflor_rang_sup_ecologie_v2012_05_08, baseflor_index_v2012_05_08, ". |
" baseflor_v2012_12_31, baseflor_rang_sup_ecologie_v2012_12_31, baseflor_index_v2012_12_31, ". |
" baseflor_v2013_07_04, baseflor_rang_sup_ecologie_v2013_07_04, baseflor_index_v2013_07_04"; |
" baseflor_v2012_12_31, baseflor_rang_sup_ecologie_v2012_12_31 "; |
$this->getBdd()->requeter($requete); |
} |
/branches/acheb/scripts/modules/baseflor/baseflor.ini |
---|
1,8 → 1,8 |
version="2013_08_05" |
dossierTsv = "{ref:dossierDonneesEflore}baseflor/2013-08-05/" |
version="2012_12_31" |
dossierTsv = "{ref:dossierDonneesEflore}baseflor/2012-12-31/" |
dossierSql = "{ref:dossierTsv}" |
dossierRangSup = "{ref:dossierDonneesEflore}baseflor/2013-08-05/rang_sup/" |
dossierIndex = "{ref:dossierDonneesEflore}baseflor/2013-08-05/index/" |
dossierRangSup = "{ref:dossierDonneesEflore}baseflor/2012-12-31/rang_sup/" |
dossierIndex = "{ref:dossierDonneesEflore}baseflor/2012-12-31/index/" |
[tables] |
donnees = "baseflor_v{ref:version}" |
/branches/acheb/scripts/modules/cel/A_LIRE.txt |
---|
1,7 → 1,7 |
Créer une base de données tb_cel avant de lancer les scripts |
== Sommaire == |
1) à propos de la mise à jour de septembre 2013 |
1) à propos de la mise à jour de juillet 2013 |
2) à propos de la table cel_references |
============== |
13,27 → 13,23 |
3) maj-cleanup-201307.sql |
uniformisation des données (lon/lat, date, ...) |
et des NULL vs 0 (pour nom_sel_nn et nom_ret_nn) |
4) fix-utilisateur-32.sql |
5) dedup-ordre-201307.sql |
6) maj-referentiel-201307.sql |
fix le référentiel pour les observation ayant un nom_sel_nn sans nom_referentiel en se |
basant sur une match exact de CONCAT(nom_sci, auteur) parmi bdtfx, bdtxa et isfan |
7) referonosaure.sql |
MAJ des observations (valides) avec les nouvelles données générées, à partir de bdtfx/bdtxa/isfan |
===== |
8) TODO: maj-nom-ret.sql |
6) TODO: maj-nom-ret.sql |
TODO (pas sûr) MAJ du référentiel pour les observation ayant un nom_ret sans nom_ret_nn mais dont le nom_ret |
ne match pas le nom_sci en BDTFX (car en BDTFX nom_ret_nn peut être égal à 0 !) |
9) maj-referentiel-und-201307.sql |
7) maj-referentiel-201307.sql |
fix le référentiel pour les observation ayant un nom_sel_nn sans nom_referentiel |
8) 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) |
9) referonosaure.sql |
MAJ des observations (valides) avec les nouvelles données générées, à partir de bdtfx/bdtxa |
41,21 → 37,22 |
=== 2: À propos de la table cel_references === |
Celle-ci existe car: |
* les projets doivent être indépendants (eflore, cel, projets nvjfl, ...) |
* les données nécessaires à l'export et à l'import sont massives |
* les données nécessaire à l'export et à l'import sont massif |
* or les webservices s'appellent parfois récursivement, sont lents et inadaptés |
La conséquence est que la construction d'une table dérivée de bdtfx/bdtxa/isfan contenant |
La conséquence est que la construction d'une table dérivée de bdtfx/bdtxa contenant |
les informations utiles pour CEL s'avère nécessaire. |
cel_references.sql construit une telle table. |
Suivent quelques éléments de compréhension et exemples de requêtes liés à cette initialisation: |
1) Détermination des noms vernaculaires meilleurs et uniques: |
1) Détermination des nom vernaculaires meilleurs et uniques: |
Ce sont ceux qui ont le num_statut le plus élevé pour un num_taxon donné dans nvjfl_v2007. |
Ce sont ceux qui ont le num_statut le plus élevés pour un num_taxon donné dans nvjfl_v2007. |
Plusieurs méthodes sont exposées ci-dessous, sachant que le couple (référentiel, num_nom) est la clef |
unique de cel_references. |
Il existe à ce jour 16146 nom communs français distincts, 12312 num_taxon pour code_lang = fra et aucun num_statut NULL en français. |
84,9 → 81,8 |
UNION \ |
SELECT "isfan", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, NULL FROM isfan_v2013 b; |
Mais évidemment, les noms communs n'existent que pour bdtfx[nvjfl], bdtxa[nva], de même que les données baseflor/baseveg. |
Plusieurs tables temporaires sont donc nécessaires en particulier puisque toutes les colonnes n'ont pas |
des indexes adaptés pour effectuer des JOIN efficaces dans le cadre de ce script d'intégration particulier. |
Mais évidemment, les noms communs n'existe que pour bdtfx, de même que les données baseflor/baseveg. Plusieurs tables temporaires sont donc nécessaires en particulier puisque toutes les colonnes n'ont pas |
des indexes adaptés pour effectuer des JOIN efficace dans le cadre de ce script d'intégration particulier. |
Une version plus aboutie, mais spécifique à bdtfx, après création préalable de T_nvjfl_v2007, était la suivante (présence des noms communs): |
INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `num_taxon`, `nom_sci`, `auteur`, `nom_commun`) \ |
/branches/acheb/scripts/modules/cel/Makefile |
---|
17,7 → 17,7 |
# cf target "maj1" ci-dessous |
# à l'aide de, note certains de ces fichiers n'ont pas cours dans le cadre de la maj1 (septembre 2013) |
# à l'aide de, note certains de ces fichiers n'ont pas cours dans le cadre de la maj1 (juillet/août 2013) |
# echo $(egrep -l 'BASE(SOURCE|EDIT|ANNUAIRE)' *.sql) |
fichiers = cel_references.sql dedup-ordre-201307.sql fix-utilisateur-32.sql maj-cleanup-201307.sql maj-nom-ret.sql \ |
maj-referentiel-201307.sql maj-referentiel-und-201307.sql maj-struct-201307.sql redempteur.sql \ |
37,23 → 37,9 |
bdtfx ?= 1_01 |
bdtxa ?= 1_00 |
isfan ?= 2013 |
bdtfx_table = bdtfx_v$(bdtfx) |
bdtxa_table = bdtxa_v$(bdtxa) |
isfan_table = isfan_v$(isfan) |
# TODO: simply override bdd_user |
ifdef bdd_user |
bdd_user_h = -u$(bdd_user) |
endif |
ifneq ($(origin bdd_pass), undefined) |
bdd_pass_h = "-p$(bdd_pass)" |
endif |
mysqlbin ?= mysql |
mysqlcmd = $(mysqlbin) $(bdd_user_h) $(bdd_pass_h) |
# macro utilisable pour les targets nécessitant de tester la présence d'un couple (base,table) |
# exemples: |
# * $(call is_table,tb_eflore,bdtfx_v1_01) |
60,43 → 46,31 |
# * $(call is_table,$(annuairedb),annuaire_tela) |
# argument 1: base de données |
# argument 2: table |
is_table = $(mysqlcmd) -N $(1) <<<"DESC $(2)" &> /dev/null |
is_table = @mysql -N $(1) <<<"DESC $(2)" &> /dev/null |
# macro utilisable pour effectuer des substitutions: |
do_subst = sed -e "1i--\n-- fichier d'origine: \"${1}\"\n" \ |
-e 's/`BASEEDIT`/`$(alterdb)`/g' \ |
do_subst = sed -e 's/`BASEEDIT`/`$(alterdb)`/g' \ |
-e 's/`BASEANNUAIRE`/`$(annuairedb)`/g' \ |
-e 's/`BASESOURCE`/`$(sourcedb)`/g' \ |
-e 's/`TABLEBDTFX`/`$(bdtfx_table)`/g' \ |
-e 's/`TABLEBDTXA`/`$(bdtxa_table)`/g' \ |
-e 's/`TABLEISFAN`/`$(isfan_table)`/g' \ |
-e 's/TABLEBDTFX/`$(bdtfx_table)`/g' \ |
-e 's/TABLEBDTXA/`$(bdtxa_table)`/g' \ |
-e 's/TABLEISFAN/`$(isfan_table)`/g' \ |
$(1) |
# default target |
help: |
@echo "make [alterdb=<$(alterdb)>] [sourcedb=<$(sourcedb)>] [annuairedb=<$(annuairedb)>] [bdtfx=<$(bdtfx)>] [bdtxa=<$(bdtxa)>] [isfan=$(isfan)] [bdd_user=\"\"] [bdd_pass=\"\"] [mysqlbin=mysql]" |
@echo "make o_maj1 mysqlbin=/usr/local/mysql/bin/mysql bdd_user=telabotap bdd_pass=XXX" |
# génère les fichiers avec les bases de données souhaitées |
compile: reset |
sed -i -e 's/`BASEEDIT`/`$(alterdb)`/g' \ |
@sed -i -e 's/`BASEEDIT`/`$(alterdb)`/g' \ |
-e 's/`BASEANNUAIRE`/`$(annuairedb)`/g' \ |
-e 's/`BASESOURCE`/`$(sourcedb)`/g' \ |
-e 's/TABLEBDTFX/`$(bdtfx_table)`/g' \ |
-e 's/TABLEBDTXA/`$(bdtxa_table)`/g' \ |
-e 's/`TABLEISFAN`/`$(isfan_table)`/g' \ |
$(fichiers) |
printf "Attention: les changements s'appliqueront sur la base \"%s\"\nLes sources utilisées seront: annuaire=\"%s\" , sources=\"%s\" (%s,%s,%s)\n(Ctrl+C pour interrompre, Enter pour continuer)\n" \ |
@printf "Attention: les changements s'appliqueront sur la base \"%s\"\nLes sources utilisées seront: annuaire=\"%s\" , sources=\"%s\" (%s,%s)\n(Ctrl+C pour interrompre, Enter pour continuer)\n" \ |
`grep ^BASEEDIT .current|cut -d '\`' -f2` \ |
`grep ^BASEANNUAIRE .current|cut -d '\`' -f2` \ |
`grep ^BASESOURCE .current|cut -d '\`' -f2` \ |
`grep ^TABLE_BDTFX .current|cut -d '=' -f2` \ |
`grep ^TABLE_BDTXA .current|cut -d '=' -f2` \ |
`grep ^TABLE_ISFAN .current|cut -d '=' -f2` |
read |
`grep ^TABLE_BDTXA .current|cut -d '=' -f2` |
@read |
reset: |
svn revert -q $(fichiers) |
105,19 → 79,23 |
clean: |
rm -f *.comp.sql |
help: |
@echo "make [alterdb=<tb_cel_test>] [sourcedb=<tb_eflore>] [annuairedb=<tela_prod_v4>] [bdtfx=<1_01>] [bdtxa=<1_00>]" |
### mises à jour |
# mise à jour de septembre 2013 |
# mise à jour de juillet/août 2013 |
# spécifier dans les targets l'ordre (cf A_LIRE.txt) |
# attention, si un prérequis ne génère pas de SQL, cela n'empêchera pas le fichier |
# final de maj d'être généré (bien, |
maj1: compile cel_references maj-struct-201307 maj-cleanup-201307 fix-utilisateur-32 dedup-ordre-201307 maj-referentiel-201307 |
echo done |
maj1: compile cel_references maj-struct-201307 maj-cleanup-201307 fix-utilisateur-32 dedup-ordre-201307 |
@echo done |
o_maj1: fichiers_generes = $(addsuffix .comp.sql,$(filter-out clean,$?)) |
o_maj1: clean o_cel_references o_maj-struct-201307 o_maj-cleanup-201307 o_fix-utilisateur-32 o_dedup-ordre-201307 o_maj-referentiel-201307 o_referonosaure |
o_maj1: clean o_cel_references o_maj-struct-201307 o_maj-cleanup-201307 o_fix-utilisateur-32 o_dedup-ordre-201307 |
cat $(fichiers_generes) > maj1.comp.sql |
echo done |
@echo done |
### fin: mises à jour |
136,57 → 114,40 |
### et pipe vers mysql directement, ce qui suppose aussi un .my.cnf ou autre |
### 2) L'autre (préfixé par o_), renvoie le fichier substitué en sortie standard |
### et le target principal s'occupe de concaténer et de créer un fichier de destination |
### Cette méthode est de loin préférable et conforme à la philosophie Makefile |
### Cette méthode est de loin préférable |
cel_references: |
$(call is_table,$(sourcedb),$(bdtfx_table)) |
$(call is_table,$(sourcedb),nvjfl_v2007) |
$(call is_table,$(sourcedb),nva_index_v2_03) |
$(call is_table,$(alterdb),cel_references) || $(mysqlcmd) < cel_references.sql |
$(call is_table,$(alterdb),cel_references) || mysql < cel_references.sql |
o_cel_references: |
$(call is_table,$(sourcedb),$(bdtfx_table)) |
$(call is_table,$(sourcedb),nvjfl_v2007) |
$(call is_table,$(sourcedb),nva_index_v2_03) |
$(call is_table,$(alterdb),cel_references) || $(call do_subst,cel_references.sql) > $@.comp.sql |
maj-struct-201307: check_cel_obs |
$(call is_table,$(annuairedb),annuaire_tela) |
$(mysqlcmd) -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || $(mysqlcmd) < maj-struct-201307.sql |
@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || mysql < maj-struct-201307.sql |
o_maj-struct-201307: check_cel_obs |
$(call is_table,$(annuairedb),annuaire_tela) |
$(mysqlcmd) -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || $(call do_subst,maj-struct-201307.sql) > $@.comp.sql |
@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || $(call do_subst,maj-struct-201307.sql) > $@.comp.sql |
maj-cleanup-201307: check_cel_obs |
! $(mysqlcmd) -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE nom_ret = 'null' LIMIT 1"|grep -q 1 || $(mysqlcmd) < maj-cleanup-201307.sql |
@ ! mysql -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE date_observation = '0000-00-00 00:00:00' LIMIT 1"|grep -q 1 || mysql < maj-cleanup-201307.sql |
o_maj-cleanup-201307: |
# tb_cel_test clean |
# ! $(mysqlcmd) -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE nom_ret = 'null' LIMIT 1"|grep -q 1 || $(call do_subst,maj-cleanup-201307.sql) > $@.comp.sql |
$(call do_subst,maj-cleanup-201307.sql) > $@.comp.sql |
@ ! mysql -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE date_observation = '0000-00-00 00:00:00' LIMIT 1"|grep -q 1 || $(call do_subst,maj-cleanup-201307.sql) > $@.comp.sql |
fix-utilisateur-32: check_cel_obs |
$(mysqlcmd) -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || $(mysqlcmd) < fix-utilisateur-32.sql |
@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || mysql < fix-utilisateur-32.sql |
o_fix-utilisateur-32: check_cel_obs |
$(mysqlcmd) -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || $(call do_subst,fix-utilisateur-32.sql) > $@.comp.sql |
@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || $(call do_subst,fix-utilisateur-32.sql) > $@.comp.sql |
dedup-ordre-201307: check_cel_obs |
#$(mysqlcmd) -N $(alterdb) <<<'SELECT distinct ce_utilisateur FROM `cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1'|grep -q . || $(mysqlcmd) < dedup-ordre-201307.sql |
$(mysqlcmd) -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || $(mysqlcmd) < dedup-ordre-201307.sql |
#@mysql -N $(alterdb) <<<'SELECT distinct ce_utilisateur FROM `cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1'|grep -q . || mysql < dedup-ordre-201307.sql |
@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || mysql < dedup-ordre-201307.sql |
o_dedup-ordre-201307: check_cel_obs |
$(mysqlcmd) -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || $(call do_subst,dedup-ordre-201307.sql) > $@.comp.sql |
@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || $(call do_subst,dedup-ordre-201307.sql) > $@.comp.sql |
# maj-referentiel-201307.sql: # pas de test aisé et rapide |
# doit passer APRÈS o_maj-cleanup-201307 (pas de nom_ret_nn = 0) |
o_maj-referentiel-201307: check_cel_obs |
$(call do_subst,maj-referentiel-201307.sql) > $@.comp.sql |
# pas de test aisé non plus pour savoir s'il doit repasser |
# néanmoins c'est un script sur (peut-être invoqué répétivement) |
o_referonosaure: check_cel_obs |
$(call do_subst,referonosaure.sql) > $@.comp.sql |
# pour une prochaine maj |
maj-nom-ret: |
$(mysqlcmd) -N <<<'SELECT count(1) FROM `$(alterdb)`.`cel_obs` c LEFT JOIN `$(sourcedb)`.`$(bdtfx_table)` b on (c.nom_ret = b.nom_sci) WHERE nom_ret_nn = 0 AND c.nom_ret != "" AND id_observation NOT IN ( SELECT id_observation FROM `$(alterdb)`.`cel_obs` c, `$(sourcedb)`.`$(bdtfx_table)` b WHERE c.nom_ret = b.nom_sci AND c.nom_ret_nn = 0 );'|grep -q 0 |
o_maj-nom-ret: |
$(call do_subst,maj-nom-ret.sql) > $@.comp.sql |
@mysql -N <<<'SELECT count(1) FROM `$(alterdb)`.`cel_obs` c LEFT JOIN `$(sourcedb)`.`$(bdtfx_table)` b on (c.nom_ret = b.nom_sci) WHERE nom_ret_nn = 0 AND c.nom_ret != "" AND id_observation NOT IN ( SELECT id_observation FROM `$(alterdb)`.`cel_obs` c, `$(sourcedb)`.`$(bdtfx_table)` b WHERE c.nom_ret = b.nom_sci AND c.nom_ret_nn = 0 );'|grep -q 0 |
/branches/acheb/scripts/modules/cel/referonosaure.sql |
---|
2,12 → 2,7 |
Objectif: prendre les observations dont nom_sel_nn est défini |
(et donc dans laquelles les informations générées sont correctes) |
et mettre à jour ces dernières à partir de la dernière version du référentiel |
(bdtfx, bdtxa et isfan). |
Pour éviter un maximum de faux-positifs, nous vérifions aussi que la famille |
est conservée (même dans certains cas celle-ci a légitimement changé) et que |
la première partie du nom_sel correspond toujours à la première partie du nouveau nom_sci |
qui serait attribué. |
(bdtfx et bdtxa). |
*/ |
--- la requête --- |
16,7 → 11,7 |
SELECT id_observation, nom_ret, nom_ret_nn, nt, c.famille |
FROM `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b |
WHERE ( |
nom_sel_nn IS NOT NULL |
nom_sel_nn IS NOT NULL AND nom_sel_nn != 0 |
AND nom_referentiel like 'bdtfx%' |
AND nom_sel_nn = num_nom |
) |
30,8 → 25,8 |
c.nt = b.num_taxonomique, |
c.famille = b.famille |
WHERE ( |
nom_sel_nn IS NOT NULL |
AND nom_referentiel = 'bdtfx' |
nom_sel_nn IS NOT NULL AND nom_sel_nn != 0 |
AND nom_referentiel like 'bdtfx%' |
AND nom_sel_nn = num_nom |
AND LOWER(c.famille) = LOWER(b.famille) |
AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(b.nom_sci, ' ', 1) |
46,8 → 41,8 |
c.nt = a.num_tax, |
c.famille = a.famille |
WHERE ( |
nom_sel_nn IS NOT NULL |
AND nom_referentiel = 'bdtxa' |
nom_sel_nn IS NOT NULL AND nom_sel_nn != 0 |
AND nom_referentiel like 'bdtxa%' |
AND nom_sel_nn = num_nom |
AND LOWER(c.famille) = LOWER(a.famille) |
AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(a.nom_sci, ' ', 1) |
55,14 → 50,14 |
-- 49 sans les restrictions sur famille et SUBSTRING_INDEX() |
-- 47 avec les restrictions sur famille et SUBSTRING_INDEX() |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i SET |
c.nom_ret = CONCAT(i.nom_sci, ' ', i.auteur), |
c.nom_ret_nn = i.num_nom, |
c.nt = i.num_taxonomique, |
c.famille = i.famille |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`isfan_v2013` a SET |
c.nom_ret = CONCAT(a.nom_sci, ' ', a.auteur), |
c.nom_ret_nn = a.num_nom, |
c.nt = a.num_taxonomique, |
c.famille = a.famille |
WHERE ( |
nom_sel_nn IS NOT NULL |
AND nom_referentiel = 'isfan' |
nom_sel_nn IS NOT NULL AND nom_sel_nn != 0 |
AND nom_referentiel like 'isfan%' |
AND nom_sel_nn = num_nom |
); |
/branches/acheb/scripts/modules/cel/sphinx-maj-nom-ret.php |
---|
42,14 → 42,12 |
WHERE nom_sel IS NOT NULL AND nom_sel != '' AND |
id_observation BETWEEN %d AND %d AND |
( nom_ret IS NULL or nom_ret = '' |
OR nom_ret_nn IS NULL or nom_ret_nn = 0 or nom_ret_nn = '' |
OR nt IS NULL or nt = 0 or nt = '' |
OR famille IS NULL or famille = '' ) |
LIMIT %d, %d |
EOF; |
// non: car nom_ret_nn peut-être légitimement à 0 [taxon identifié, sans nom_retenu] |
// OR nom_ret_nn IS NULL or nom_ret_nn = 0 or nom_ret_nn = '' |
array_shift($argv); |
$start = array_shift($argv); |
$max = array_shift($argv); |
/branches/acheb/scripts/modules/cel/maj-cleanup-201307.sql |
---|
12,18 → 12,8 |
-- pas de raison historique mémorisée à une différence '' vs NULL |
UPDATE `BASEEDIT`.`cel_obs` SET nom_referentiel = NULL where nom_referentiel = ''; |
-- uniformisation NULL / vide pour nom_sel |
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel = NULL WHERE nom_sel = ''; |
-- uniformisation NULL / vide pour nom_sel_nn |
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel_nn = NULL WHERE nom_sel_nn = 0; |
-- restauration de nom_sel vraisemblablement valides, mais vides: 48 obs |
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel = nom_ret WHERE nom_sel IS NULL AND nom_ret IS NOT NULL AND nom_ret != '' AND nom_sel_nn IS NOT NULL; |
-- suppression des infos générées pour les observations dont le nom_sel à été supprimé par l'utilisateur |
-- 3380 |
-- 3172 |
UPDATE `BASEEDIT`.`cel_obs` c SET |
c.nom_ret = '', |
c.nom_sel_nn = NULL, |
31,23 → 21,17 |
c.nom_ret_nn = NULL, |
c.nt = NULL, |
c.famille = NULL |
WHERE nom_sel IS NULL OR nom_ret = 'undefined'; |
WHERE nom_sel = '' OR nom_sel IS NULL; |
-- problème n°1: mauvais référentiel (bdtfx au lieu de bdtxa), on utilise les lieudit "bdtxa" pour |
-- corriger les observations qui pourraient être étiquetées avec un mauvais nom_referentiel: 49 obs |
CREATE TEMPORARY TABLE T_cleanref (lieu VARCHAR(255)) ENGINE=MEMORY AS ( SELECT DISTINCT TRIM(lieudit) FROM `BASEEDIT`.`cel_obs` WHERE nom_referentiel = 'bdtxa' ); |
UPDATE `BASEEDIT`.`cel_obs` SET nom_referentiel = 'bdtxa' WHERE nom_referentiel != 'bdtxa' AND lieudit != '' AND lieudit IN (SELECT lieu FROM T_cleanref); |
DROP TEMPORARY TABLE T_cleanref; |
-- problème n°1: mauvais référentiel (bdtfx) |
UPDATE `BASEEDIT`.`cel_obs` SET nom_referentiel = 'bdtxa' WHERE lieudit = 'Grenade'; |
-- problème n°2: backslashes + newline: 90 + 217 obs |
-- problème n°2: nom_sel NULL, nom_ret NOT NULL: 26 obs |
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel = nom_ret, nom_sel_nn = nom_ret_nn WHERE nom_sel IS NULL AND nom_ret IS NOT NULL; |
-- problème n°3: backslashes + newline: 90 + 217 obs |
UPDATE `BASEEDIT`.`cel_obs` SET commentaire = REPLACE(commentaire, "\n\\\'", "'"); |
UPDATE `BASEEDIT`.`cel_obs` SET commentaire = REPLACE(commentaire, "\\\'", "'"); |
-- problème n°3: ce_zone_geo inutile: 57802 obs |
-- problème n°4: ce_zone_geo inutile: 57802 obs |
UPDATE `BASEEDIT`.`cel_obs` SET ce_zone_geo = NULL WHERE ce_zone_geo = 'INSEE-C:'; |
-- trim nom_sel |
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel = TRIM(nom_sel); |
-- nom_ret = "null" |
UPDATE `BASEEDIT`.`cel_obs` SET nom_ret = NULL WHERE nom_ret = 'null'; |
/branches/acheb/scripts/modules/cel/maj-nom-ret.sql |
---|
3,7 → 3,7 |
En effet, on peut pour l'instant POSTer $nom_ret, d'où bien souvent nom_sel == nom_ret, cependant nom_ret_nn = 0 |
(pas d'autodétection). |
Nous pourrions donc les nullifier sans remord, ... mais ... |
nom_ret_nn == 0 est VALIDE (car bdtfx.num_nom_retenu == 0 est "valide", 3960 taxons sont "orphelins" de nom_retenu) |
nom_ret == 0 est VALIDE (car bdtfx.num_nom_retenu == 0 est valide) [ 3800 nom_retenu "orphelins" de taxon ] |
1) créer un index pour les jointures: |
CREATE INDEX i_nom_ret ON `BASESOURCE`.`TABLEBDTFX` (`nom_sci`(8)) |
15,10 → 15,10 |
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 |
Donc ceux dont le nom_ret à été POSTé manuellement et qui matchent le nom_sci de BDTFX : on les conserve. |
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 ! |
Mais les autres, qui ont un nom_ret probablement erroné et un nom_ret_nn à 0, on NULLify les données censées être (correctement) autogénérées ! |
Cela concerne: |
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 |
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 |
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 |
*/ |
-- D'où la requête : |
28,18 → 28,17 |
-- TODO |
-- UPDATE `BASEEDIT`.`cel_obs` SET nom_ret_nn = NULL WHERE nom_ret_nn = 0; |
-- UPDATE `BASEEDIT`.`cel_obs` SET nom_sel_nn = NULL WHERE nom_sel_nn = 0; |
/* |
UPDATE `BASEEDIT`.`cel_obs` SET nom_sel = NULL, nom_sel_nn = NULL, nom_ret = NULL, nom_ret_nn = NULL, nt = NULL, famille = NULL, |
FROM `BASEEDIT`.`cel_obs` |
WHERE nom_sel IS NULL AND |
WHERE (nom_sel = '' OR nom_sel IS NULL) AND |
( |
(nom_ret IS NOT NULL AND nom_ret != '') OR |
(nom_ret_nn IS NOT NULL AND nom_ret_nn != 0 AND nom_ret_nn != '') OR |
(nt IS NOT NULL AND nt != 0 AND nt != '') OR |
(famille IS NOT NULL AND famille != '') |
) |
-- pas de test de nullité sur nom_ret_nn qui peut légitimement être NULL |
(nom_ret_nn IS NOT NULL AND nom_ret_nn != 0 AND nom_ret_nn != '') OR |
*/ |
/branches/acheb/scripts/modules/cel/.current |
---|
6,4 → 6,3 |
BASESOURCE=`BASESOURCE` |
TABLE_BDTFX=TABLEBDTFX |
TABLE_BDTXA=TABLEBDTXA |
TABLE_ISFAN=TABLEISFAN |
/branches/acheb/scripts/modules/cel/maj-referentiel-201307.sql |
---|
22,23 → 22,16 |
CREATE TEMPORARY TABLE IF NOT EXISTS T_bis ( INDEX(`nom`(30))) AS \ |
SELECT "bdtfx" AS valid_ref, CONCAT(b.nom_sci, ' ', b.auteur) AS nom, b.num_nom, b.num_taxonomique, b.famille FROM `BASESOURCE`.`TABLEBDTFX` b UNION ALL \ |
SELECT "bdtxa" AS valid_ref, CONCAT(a.nom_sci, ' ', a.auteur) AS nom, a.num_nom, a.num_tax, a.famille FROM `BASESOURCE`.`TABLEBDTXA` a UNION ALL \ |
SELECT "isfan" AS valid_ref, CONCAT(i.nom_sci, ' ', i.auteur) AS nom, i.num_nom, i.num_taxonomique, i.famille FROM `BASESOURCE`.`TABLEISFAN` i; |
SELECT "bdtxa" AS valid_ref, CONCAT(a.nom_sci, ' ', a.auteur) AS nom, a.num_nom, a.num_tax, a.famille FROM `BASESOURCE`.`TABLEBDTXA` a; |
/* Donc nous JOINons: |
-- INNER JOIN sur bdtfx: 62633 |
-- INNER JOIN sur bdtfx: 69719 |
SELECT id_observation, nom_referentiel, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, c.famille FROM `BASEEDIT`.`cel_obs` c INNER JOIN `BASESOURCE`.`TABLEBDTFX` b ON (b.num_nom = c.nom_sel_nn) WHERE nom_referentiel IS NULL AND nom_sel_nn IS NOT NULL; |
-- INNER JOIN sur bdtxa: 9469 |
SELECT id_observation, nom_referentiel, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, c.famille FROM `BASEEDIT`.`cel_obs` c INNER JOIN `BASESOURCE`.`TABLEISFAN` i ON (i.num_nom = c.nom_sel_nn) WHERE nom_referentiel IS NULL AND nom_sel_nn IS NOT NULL; |
-- INNER JOIN sur isfan: 1991 |
SELECT id_observation, nom_referentiel, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, c.famille FROM `BASEEDIT`.`cel_obs` c INNER JOIN `BASESOURCE`.`TABLEISFAN` i ON (i.num_nom = c.nom_sel_nn) WHERE nom_referentiel IS NULL AND nom_sel_nn IS NOT NULL; |
-- INNER JOIN sur les 3 référentiels (bdtxa + bdtfx + isfan): 74093 |
SELECT id_observation, valid_ref, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, c.famille FROM `BASEEDIT`.`cel_obs` c INNER JOIN T_bis b ON (b.num_nom = c.nom_sel_nn) WHERE nom_referentiel IS NULL AND nom_sel_nn IS NOT NULL; |
-- INNER JOIN sur bdtxa: 79471 dont 9752 en dup (bdtxa + bdtfx), eg: 1005047 |
SELECT id_observation, nom_referentiel, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, c.famille FROM `BASEEDIT`.`cel_obs` c INNER JOIN T_bis b ON (b.num_nom = c.nom_sel_nn) WHERE nom_referentiel AND nom_sel_nn IS NOT NULL; |
*/ |
/* mais de nombreux noms sont exactement présents dans plusieurs référentiels, |
d'où GROUP BY id_observation HAVING count(id_observation) = 1, |
ce qui ne produit plus que 51359 matches (soit 22734 dups) */ |
/* d'où GROUP BY id_observation HAVING count(id_observation) = 1 */ |
/* |
SELECT id_observation, nom_referentiel, nom_sel, nom_sel_nn, nom_ret, nom_ret_nn, nt, c.famille |
FROM `BASEEDIT`.`cel_obs` c |
45,7 → 38,7 |
INNER JOIN T_bis b |
ON (b.num_nom = c.nom_sel_nn) |
WHERE nom_referentiel IS NULL AND nom_sel_nn IS NOT NULL GROUP BY id_observation HAVING count(id_observation) = 1; |
-- 51359, tous bdtfx... |
-- 59967, tous bdtfx... |
*/ |
/branches/acheb/scripts/modules/cel/cel_references.sql |
---|
30,7 → 30,7 |
`num_nom_retenu` VARCHAR(9) DEFAULT NULL COMMENT 'depuis bdtfx', |
-- bdtfx + nvjfl_v2007 + nva_v2013_06 |
`num_taxon` int(9) NOT NULL COMMENT "depuis bdtfx, nvjfl_v2007 et nva_v2013_06 (commun), les noms non-associés ne sont pas intégrés pour l'instant", -- 'relax emacs |
`num_taxon` int(9) NOT NULL COMMENT "depuis bdtfx, nvjfl_v2007 et nva_v2013_06 (commun), les noms non-associés ne sont pas intégrés pour l\'instant", |
-- bdtfx |
`nom_sci` VARCHAR(500) NOT NULL COMMENT 'depuis bdtfx', |
66,22 → 66,18 |
INDEX (`num_taxon`) |
) ENGINE=MyISAM \ |
DEFAULT CHARSET=utf8 \ |
COMMENT 'table générée par eflore/projets/scripts/modules/cel/cel_references.sql à partir de `TABLEBDTFX`, `TABLEBDTXA` et `TABLEISFAN`'; |
COMMENT 'table générée par eflore/projets/scripts/modules/cel/cel_references.sql à partir de TABLEBDTFX, TABLEBDTXA et nvjfl_v2007'; |
-- tables temporaires |
DROP TEMPORARY TABLE IF EXISTS `T_nvjfl_v2007`, `T_nva_v2013_06`, `T_basevegflor`; |
-- pour nvjfl_v2007, le nom recommandé ou typique est celui pour lequel num_statut = 1 (mais plusieurs sont possibles, d'où le GROUP BY num_taxon) |
CREATE TEMPORARY TABLE T_nvjfl_v2007 ( INDEX(`num_taxon`) ) AS \ |
-- ( SELECT n.num_taxon, n.nom_vernaculaire FROM `BASESOURCE`.`nvjfl_v2007` n WHERE n.code_langue = 'fra' GROUP BY n.num_taxon, n.num_statut HAVING n.num_statut = MAX(n.num_statut) ); |
-- ( SELECT n.num_taxon, n.nom_vernaculaire, n.num_statut as void, MAX(n.num_statut) as void2 FROM `BASESOURCE`.`nvjfl_v2007` n WHERE n.code_langue = 'fra' GROUP BY n.num_taxon HAVING n.num_statut = MAX(n.num_statut) ); |
( SELECT n.num_taxon, n.nom_vernaculaire FROM `BASESOURCE`.`nvjfl_v2007` n WHERE n.code_langue = 'fra' AND n.num_statut = 1 GROUP BY n.num_taxon ); |
( SELECT n.num_taxon, n.nom_vernaculaire, n.num_statut as void, MAX(n.num_statut) as void2 FROM `BASESOURCE`.`nvjfl_v2007` n WHERE n.code_langue = 'fra' GROUP BY n.num_taxon HAVING n.num_statut = MAX(n.num_statut) ); |
-- table temporaire uniquement parce qu'il manque un index-key, autrement le LEFT JOIN ci-dessous est bien trop long |
CREATE TEMPORARY TABLE T_nva_v2013_06 ( INDEX(`num_taxon`) ) AS \ |
-- ( SELECT n.num_taxon, n.nom_vernaculaire FROM `BASESOURCE`.`nva_v2013_06` n WHERE n.code_langue = 'fra' /* DB pb */ AND n.num_taxon IS NOT NULL /* /DB pb */ GROUP BY n.num_nom); -- aggrégat arbitraire car pas de num_statut |
-- pour nva_index, le nom recommandé ou typique est celui pour lequel num_statut = 0 (mais il n'y en a aucun à l'heure actuelle) (mais plusieurs sont possibles, d'où le GROUP BY num_nom) |
( SELECT n.num_taxon, n.nom_vernaculaire FROM `BASESOURCE`.`nva_index_v2_03` n WHERE n.code_langue = 'fra' /* AND n.num_statut = 0 */ GROUP BY n.num_taxon); |
( SELECT n.num_taxon, n.nom_vernaculaire FROM `BASESOURCE`.`nva_v2013_06` n WHERE n.code_langue = 'fra' /* DB pb */ AND n.num_taxon IS NOT NULL /* /DB pb */ GROUP BY n.num_nom); -- aggrégat arbitraire car pas de num_statut |
-- JOIN ON num_taxon_originel car INDEX |
112,7 → 108,7 |
INSERT INTO `BASEEDIT`.`cel_references` (`referentiel`, `num_nom`, `num_nom_retenu`, `num_taxon`, `nom_sci`, `auteur`) \ |
SELECT "isfan", b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci, b.auteur FROM `BASESOURCE`.`TABLEISFAN` b; |
SELECT "isfan", b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci, b.auteur FROM `BASESOURCE`.`isfan_v2013` b; |
122,7 → 118,7 |
SELECT SUM(theorie.a) AS théorie, pratique.a AS total FROM \ |
(SELECT COUNT(1) AS a FROM `BASESOURCE`.`TABLEBDTFX` UNION ALL \ |
SELECT COUNT(1) AS a FROM `BASESOURCE`.`TABLEBDTXA` UNION ALL \ |
SELECT COUNT(1) AS a FROM `BASESOURCE`.`TABLEISFAN` \ |
SELECT COUNT(1) AS a FROM `BASESOURCE`.`isfan_v2013` \ |
) AS theorie, \ |
(SELECT COUNT(1) AS a FROM tb_cel.cel_references) AS pratique; |
-- bdtfx+bdtxa+isfan: 141181 (2013/07/23) |
/branches/acheb/scripts/modules/cel/dedup-ordre-201307.sql |
---|
18,7 → 18,7 |
RETURN c; |
END |
| |
-- SELECT next_ordre(""); |
-- 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 |
25,7 → 25,7 |
SELECT ordre, count(ordre), MIN(id_observation) INTO _ordre, _c, _min_obs FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur = _s1 GROUP BY ordre HAVING COUNT(ordre) > 1 LIMIT 1; |
END |
| |
-- SELECT ordre_need_update(""); |
-- SELECT ordre_need_update("vincent.vuillermoz@apprenti.isa-lille.fr"); |
CREATE PROCEDURE update_ordre_user(IN _s1 VARCHAR(255)) |
BEGIN |
54,7 → 54,7 |
END WHILE; |
END |
| |
-- CALL update_ordre_user(""); |
-- CALL update_ordre_user("vincent.vuillermoz@apprenti.isa-lille.fr"); |
CREATE PROCEDURE update_ordre_users() |
65,10 → 65,8 |
-- temp table |
CREATE TEMPORARY TABLE IF NOT EXISTS _temp_users (ce_utilisateur VARCHAR(255)) ENGINE=MEMORY AS \ |
-- the following fails (http://dba.stackexchange.com/questions/48231 ?) |
-- ( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1 ); |
( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` WHERE ce_utilisateur IN \ |
(SELECT ce_utilisateur FROM `BASEEDIT`.`cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(1) > 1) ); |
( SELECT DISTINCT ce_utilisateur FROM `BASEEDIT`.`cel_obs` |
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 |
/branches/acheb/scripts/bibliotheque/Outils.php |
---|
19,7 → 19,7 |
} |
public static function extraireRequetes($contenuSql) { |
$requetesExtraites = preg_split("/;\e*\t*\r*\n/", $contenuSql); |
$requetesExtraites = explode(";\n", $contenuSql); |
if (count($requetesExtraites) == 0){ |
throw new Exception("Aucune requête n'a été trouvée dans le fichier SQL : $cheminFichierSql"); |
} |
/branches/acheb |
---|
Property changes: |
Deleted: svn:mergeinfo |
Reverse-merged /trunk:r880-889 |