Subversion Repositories eFlore/Applications.del

Rev

Rev 1491 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1491 Rev 1492
Line 45... Line 45...
45
 * - subqueries dans le FROM pour les critère WHERE portant directement sur v_del_image
45
 * - subqueries dans le FROM pour les critère WHERE portant directement sur v_del_image
46
 * plutôt que dans WHERE (qui nécessite dès lors un FULL-JOIN)
46
 * plutôt que dans WHERE (qui nécessite dès lors un FULL-JOIN)
47
 * (http://www.mysqlperformanceblog.com/2007/04/06/using-delayed-join-to-optimize-count-and-limit-queries/)
47
 * (http://www.mysqlperformanceblog.com/2007/04/06/using-delayed-join-to-optimize-count-and-limit-queries/)
48
 * - éviter de dépendre d'une jointure systématique sur `cel_obs`, uniquement pour `(date_)transmission
48
 * - éviter de dépendre d'une jointure systématique sur `cel_obs`, uniquement pour `(date_)transmission
49
 * (cf VIEW del_image)
49
 * (cf VIEW del_image)
50
 * - poursuivre la réorganisation des méthodes statiques parmis Observation, ListeObservations et ListImages2
50
 * - poursuivre la réorganisation des méthodes statiques parmis Observation, ListeObservations et ListeImages2
51
 * - *peut-être*: passer requestFilterParams() en méthode de classe
51
 * - *peut-être*: passer requestFilterParams() en méthode de classe
52
 *
52
 *
53
 *
53
 *
54
 * MySQL sux:
54
 * MySQL sux:
55
 * EXPLAIN SELECT  id_image FROM v_del_image vdi WHERE vdi.id_image IN (SELECT ce_image FROM del_image_tag WHERE actif = 1 LIMIT 1);
55
 * EXPLAIN SELECT  id_image FROM v_del_image vdi WHERE vdi.id_image IN (SELECT ce_image FROM del_image_tag WHERE actif = 1 LIMIT 1);
Line 64... Line 64...
64
 * FORCE INDEX/IGNORE INDEX semble incapable de résoudre le problème de l'optimiseur MySQL
64
 * FORCE INDEX/IGNORE INDEX semble incapable de résoudre le problème de l'optimiseur MySQL
65
 *
65
 *
66
 */
66
 */
Line 67... Line 67...
67
 
67
 
68
require_once(dirname(__FILE__) . '/../DelTk.php');
-
 
69
require_once(dirname(__FILE__) . '/../observations/ListeObservations.php');
68
require_once(dirname(__FILE__) . '/../DelTk.php');
70
require_once(dirname(__FILE__) . '/../observations/Observation.php');
69
require_once(dirname(__FILE__) . '/../observations/Observation.php');
71
restore_error_handler();
70
restore_error_handler();
72
restore_exception_handler();
71
restore_exception_handler();
Line 178... Line 177...
178
		/* $this->conteneur->setParametre('url_images', sprintf($this->conteneur->getParametre('url_images'),
177
		/* $this->conteneur->setParametre('url_images', sprintf($this->conteneur->getParametre('url_images'),
179
		   "%09d", $params['format']));*/
178
		   "%09d", $params['format']));*/
Line 180... Line 179...
180
 
179
 
181
		// création des contraintes (génériques de DelTk)
180
		// création des contraintes (génériques de DelTk)
182
		DelTk::sqlAddConstraint($params, $db, $req);
-
 
183
		// création des contraintes héritées de Identiplante (TODO: needed ??)
-
 
184
		ListeObservations::sqlAddConstraint($params, $db, $req, $this->conteneur);
181
		DelTk::sqlAddConstraint($params, $db, $req);
185
		// création des contraintes spécifiques (sur les tags essentiellement)
182
		// création des contraintes spécifiques (sur les tags essentiellement)
186
		self::sqlAddConstraint($params, $db, $req, $this->conteneur);
183
		self::sqlAddConstraint($params, $db, $req, $this->conteneur);
187
		// création des contraintes spécifiques impliquées par le masque général
184
		// création des contraintes spécifiques impliquées par le masque général
188
		self::sqlAddMasqueConstraint($params, $db, $req, $this->conteneur);
185
		self::sqlAddMasqueConstraint($params, $db, $req, $this->conteneur);
Line 472... Line 469...
472
	   de manière identique à la seule différence que:
469
	   de manière identique à la seule différence que:
473
	   1) ils sont combinés par des "OU" logiques plutôt que des "ET".
470
	   1) ils sont combinés par des "OU" logiques plutôt que des "ET".
474
	   2) les tags sont traités différemment pour conserver la compatibilité avec l'utilisation historique:
471
	   2) les tags sont traités différemment pour conserver la compatibilité avec l'utilisation historique:
475
       Tous les mots-clefs doivent matcher et sont séparés par des espaces
472
       Tous les mots-clefs doivent matcher et sont séparés par des espaces
476
       (dit autrement, str_replace(" ", ".*", $mots-clefs-requête) =~ $mots-clefs-mysql)
473
       (dit autrement, str_replace(" ", ".*", $mots-clefs-requête) =~ $mots-clefs-mysql)
477
	   Pour plus d'information: ListeObservations::sqlAddMasqueConstraint() */
474
	   Pour plus d'information: (ListeObservations|DelTk)::sqlAddMasqueConstraint() */
478
	static function sqlAddMasqueConstraint($p, $db, &$req, Conteneur $c = NULL) {
475
	static function sqlAddMasqueConstraint($p, $db, &$req, Conteneur $c = NULL) {
479
		if(!empty($p['masque'])) {
476
		if(!empty($p['masque'])) {
480
			$or_params = array('masque.auteur' => $p['masque'],
477
			$or_params = array('masque.auteur' => $p['masque'],
481
            'masque.departement' => $p['masque'],
478
            'masque.departement' => $p['masque'],
482
            'masque.commune' => $p['masque'], // TODO/XXX ?
479
            'masque.commune' => $p['masque'], // TODO/XXX ?
Line 508... Line 505...
508
 
505
 
509
 
506
 
510
			// pas de select, groupby & co ici: uniquement 'join' et 'where'
507
			// pas de select, groupby & co ici: uniquement 'join' et 'where'
511
			$or_req = array('join' => array(), 'where' => array());
-
 
512
			DelTk::sqlAddConstraint($or_masque, $db, $or_req);
508
			$or_req = array('join' => array(), 'where' => array());
Line 513... Line 509...
513
			ListeObservations::sqlAddConstraint($or_masque, $db, $or_req);
509
			DelTk::sqlAddConstraint($or_masque, $db, $or_req);
514
			self::sqlAddConstraint($or_masque, $db, $or_req);
510
			self::sqlAddConstraint($or_masque, $db, $or_req);
515
 
511