Line 80... |
Line 80... |
80 |
$this->verifierParametresTri();
|
80 |
$this->verifierParametresTri();
|
81 |
$this->initialiserTri();
|
81 |
$this->initialiserTri();
|
Line 82... |
Line 82... |
82 |
|
82 |
|
83 |
$resultat = new ResultatService();
|
83 |
$resultat = new ResultatService();
|
84 |
if ($this->requeteSansParametres($ressources, $parametres)) {
|
84 |
if ($this->requeteSansParametres($ressources, $parametres)) {
|
85 |
$liaisons = $this->chargerLiaisonsSimple();
|
85 |
$liaisons = $this->chargerLiaisonsSimple($total);
|
86 |
$observations = $this->chargerObservations($liaisons);
|
- |
|
87 |
$total = $this->compterObservations();
|
86 |
$observations = $this->chargerObservations($liaisons);
|
88 |
$this->navigation->setTotal($total);
|
87 |
$this->navigation->setTotal($total);
|
89 |
// modifie $observations
|
88 |
// modifie $observations
|
90 |
$this->chargerImages($observations);
|
89 |
$this->chargerImages($observations);
|
91 |
// modifie $observations
|
90 |
// modifie $observations
|
Line 99... |
Line 98... |
99 |
}
|
98 |
}
|
Line 100... |
Line 99... |
100 |
|
99 |
|
101 |
// Mettre en forme le résultat et l'envoyer pour affichage
|
100 |
// Mettre en forme le résultat et l'envoyer pour affichage
|
102 |
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $resultats);
|
101 |
$resultat->corps = array('entete' => $this->conteneur->getEntete(), 'resultats' => $resultats);
|
103 |
} else {
|
102 |
} else {
|
104 |
$liaisons = $this->chargerLiaisons();
|
- |
|
105 |
$total = $this->compterObservations();
|
103 |
$liaisons = $this->chargerLiaisons($total);
|
106 |
$this->navigation->setTotal($total);
|
104 |
$this->navigation->setTotal($total);
|
107 |
$observations = $this->chargerObservations($liaisons);
|
105 |
$observations = $this->chargerObservations($liaisons);
|
108 |
// modifie $observations
|
106 |
// modifie $observations
|
109 |
$this->chargerImages($observations);
|
107 |
$this->chargerImages($observations);
|
Line 470... |
Line 468... |
470 |
|
468 |
|
471 |
/*-------------------------------------------------------------------------------
|
469 |
/*-------------------------------------------------------------------------------
|
472 |
CHARGEMENT DES OBSERVATIONS
|
470 |
CHARGEMENT DES OBSERVATIONS
|
473 |
--------------------------------------------------------------------------------*/
|
471 |
--------------------------------------------------------------------------------*/
|
474 |
/**
|
472 |
/**
|
- |
|
473 |
* Chargement depuis la bdd de toutes les liaisons entre images et observations
|
- |
|
474 |
*
|
- |
|
475 |
* Cette triple jointure pose divers problèmes d'efficacité.
|
- |
|
476 |
* - le SQL_CALC_FOUND_ROWS en premier lieu est (était) inefficace
|
- |
|
477 |
* (cf http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/)
|
- |
|
478 |
* - les INDEX ne sont peut-être pas non-plus bien réglés (certains manquent cruellement, notamment
|
- |
|
479 |
* pour les champs présents dans le ORDER BY)
|
475 |
* Chargement depuis la bdd de toutes les liaisons entre images et observations
|
480 |
* - enfin id_utilisateur à un typage très aléatoire selon les tables/vues d'origine
|
476 |
* */
|
481 |
*/
|
- |
|
482 |
private function chargerLiaisons(&$count) {
|
- |
|
483 |
$where = $this->chargerClauseWhere();
|
- |
|
484 |
|
- |
|
485 |
// on effectue d'abord la sélection des observations et leur comptage
|
- |
|
486 |
// sur une table simple et restreinte (en fait, une vue) sans jointures ...
|
- |
|
487 |
$r = sprintf('SELECT id_observation FROM del_observation %s ORDER BY %s %s %s',
|
- |
|
488 |
$where,
|
- |
|
489 |
$this->tri,
|
- |
|
490 |
$this->directionTri,
|
- |
|
491 |
$this->gestionBdd->getLimitSql());
|
- |
|
492 |
$idObs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'),
|
- |
|
493 |
$this->bdd->recupererTous($r)));
|
- |
|
494 |
|
- |
|
495 |
|
- |
|
496 |
$c = $this->bdd->recupererTous(sprintf('SELECT count(1) AS c FROM del_observation AS dob %s', $where));
|
- |
|
497 |
$count = $c[0]['c'];
|
- |
|
498 |
|
- |
|
499 |
// puis seulement après l'obtention des données complètes, mais cette fois-ci avec
|
477 |
private function chargerLiaisons() {
|
500 |
// l'ensemble prédéterminé d'id d'observations obtenus ci-dessus
|
478 |
$requeteLiaisons = sprintf(
|
501 |
$requeteLiaisons = sprintf(
|
479 |
'SELECT SQL_CALC_FOUND_ROWS '.
|
502 |
'SELECT '.
|
480 |
' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
|
503 |
' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
|
481 |
' station, milieu, date_observation, dob.mots_cles_texte, date_transmission, di.id_image, '.
|
504 |
' station, milieu, date_observation, dob.mots_cles_texte, date_transmission, di.id_image, '.
|
482 |
' dob.ce_utilisateur, prenom, nom, courriel, '.
|
505 |
' dob.ce_utilisateur, prenom, nom, courriel, '.
|
483 |
' dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
|
506 |
' dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
|
Line 488... |
Line 511... |
488 |
' ON du.id_utilisateur = dob.ce_utilisateur '.
|
511 |
' ON du.id_utilisateur = dob.ce_utilisateur '.
|
489 |
' LEFT JOIN del_obs_image AS doi '.
|
512 |
' LEFT JOIN del_obs_image AS doi '.
|
490 |
' ON doi.id_observation = dob.id_observation '.
|
513 |
' ON doi.id_observation = dob.id_observation '.
|
491 |
' LEFT JOIN del_image AS di '.
|
514 |
' LEFT JOIN del_image AS di '.
|
492 |
' ON di.id_image = doi.id_image '.
|
515 |
' ON di.id_image = doi.id_image '.
|
493 |
'%s'.
|
- |
|
494 |
' GROUP BY doi.id_observation'.
|
516 |
' WHERE dob.id_observation IN (%s) -- %s',
|
495 |
' ORDER BY %s %s %s -- %s',
|
- |
|
496 |
$this->chargerClauseWhere(),
|
- |
|
497 |
$this->tri,
|
- |
|
498 |
$this->directionTri,
|
517 |
implode(',',$idObs),
|
499 |
$this->gestionBdd->getLimitSql(),
|
- |
|
500 |
__FILE__ . ':' . __LINE__);
|
518 |
__FILE__ . ':' . __LINE__);
|
501 |
|
- |
|
502 |
return $this->bdd->recupererTous($requeteLiaisons);
|
519 |
return $this->bdd->recupererTous($requeteLiaisons);
|
503 |
}
|
520 |
}
|
Line 504... |
Line 521... |
504 |
|
521 |
|
- |
|
522 |
private function chargerLiaisonsSimple(&$count) {
|
- |
|
523 |
$r = sprintf('SELECT id_observation FROM del_observation ORDER BY %s %s %s',
|
- |
|
524 |
$this->tri,
|
- |
|
525 |
$this->directionTri,
|
- |
|
526 |
$this->gestionBdd->getLimitSql());
|
- |
|
527 |
$idObs = array_values(array_map(create_function('$a', 'return $a["id_observation"];'),
|
- |
|
528 |
$this->bdd->recupererTous($r)));
|
- |
|
529 |
|
- |
|
530 |
$c = $this->bdd->recupererTous('SELECT count(1) AS c FROM del_observation');
|
- |
|
531 |
$count = $c[0]['c'];
|
505 |
private function chargerLiaisonsSimple() {
|
532 |
|
506 |
$requeteObs = sprintf(
|
533 |
$requeteLiaisons = sprintf(
|
507 |
'SELECT SQL_CALC_FOUND_ROWS '.
|
534 |
'SELECT '.
|
508 |
' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
|
535 |
' dob.id_observation, nom_sel, famille, ce_zone_geo, zone_geo, lieudit, '.
|
509 |
' station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
|
536 |
' station, milieu, date_observation, dob.mots_cles_texte, date_transmission, '.
|
510 |
' dob.ce_utilisateur, prenom, nom, courriel, '.
|
537 |
' dob.ce_utilisateur, prenom, nom, courriel, '.
|
511 |
' dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
|
538 |
' dob.prenom_utilisateur, dob.nom_utilisateur, dob.courriel_utilisateur, '.
|
512 |
' dob.commentaire as dob_commentaire, '.
|
539 |
' dob.commentaire as dob_commentaire, '.
|
513 |
' dob.nt, dob.nom_sel_nn '.
|
540 |
' dob.nt, dob.nom_sel_nn '.
|
514 |
'FROM del_observation AS dob '.
|
541 |
'FROM del_observation AS dob '.
|
515 |
' LEFT JOIN del_utilisateur AS du ON dob.ce_utilisateur = du.id_utilisateur '.
|
542 |
' LEFT JOIN del_utilisateur AS du ON dob.ce_utilisateur = du.id_utilisateur '.
|
516 |
' ORDER BY %s %s %s -- %s',
|
- |
|
517 |
$this->tri,
|
543 |
' WHERE dob.id_observation IN (%s) -- %s',
|
518 |
$this->directionTri,
|
- |
|
519 |
$this->gestionBdd->getLimitSql(),
|
544 |
implode(',',$idObs),
|
520 |
__FILE__ . ':' . __LINE__);
|
545 |
__FILE__ . ':' . __LINE__);
|
521 |
$liaisons = $this->bdd->recupererTous($requeteObs);
|
- |
|
522 |
|
- |
|
523 |
return $liaisons;
|
546 |
return $this->bdd->recupererTous($requeteLiaisons);
|
Line 524... |
Line 547... |
524 |
}
|
547 |
}
|
525 |
|
548 |
|
526 |
/**
|
549 |
/**
|