Subversion Repositories eFlore/Applications.del

Rev

Rev 1451 | Rev 1490 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1451 Rev 1486
Line 364... Line 364...
364
		if($p['masque.tag_pictoflora']) {
364
		if($p['masque.tag_pictoflora']) {
365
			// pas de LEFT JOIN ? ou bien peut-être en cas de tri, mais nous parlons bien ici d'un masque
365
			// pas de LEFT JOIN ? ou bien peut-être en cas de tri, mais nous parlons bien ici d'un masque
366
			/* $req['join'][] = 'LEFT JOIN del_image_tag dit ON dit.ce_image = vdi.id_image';
366
			/* $req['join'][] = 'LEFT JOIN del_image_tag dit ON dit.ce_image = vdi.id_image';
367
			   $req['where'][] = 'dit.actif = 1'; */
367
			   $req['where'][] = 'dit.actif = 1'; */
Line -... Line 368...
-
 
368
 
-
 
369
 
-
 
370
 
-
 
371
			// ==== commenté pour l'instant pour cause de soucis d'optimiseur MySQL (cf commentaire en intro) ====
368
 
372
			/*
369
			if(isset($p['masque.tag_pictoflora']['AND'])) {
373
              if(isset($p['masque.tag_pictoflora']['AND'])) {
370
				// optimsation: en cas de "AND" on sort() l'input et le GROUP_CONCAT()
374
              // optimsation: en cas de "AND" on sort() l'input et le GROUP_CONCAT()
371
				// donc nous utilisons des ".*" plutôt que de multiples conditions et "|"
375
              // donc nous utilisons des ".*" plutôt que de multiples conditions et "|"
372
				sort($p['masque.tag_pictoflora']['AND']);
376
              sort($p['masque.tag_pictoflora']['AND']);
Line 379... Line 383...
379
				$req['where'][] = sprintf("vdi.id_image IN (SELECT ce_image FROM del_image_tag WHERE actif = 1".
383
              $req['where'][] = sprintf("vdi.id_image IN (SELECT ce_image FROM del_image_tag WHERE actif = 1".
380
										  " GROUP BY ce_image".
384
              " GROUP BY ce_image".
381
										  " HAVING GROUP_CONCAT(tag_normalise) REGEXP %s)",
385
              " HAVING GROUP_CONCAT(tag_normalise) REGEXP %s)",
382
										  $db->proteger(implode('|', $p['masque.tag_pictoflora']['OR'])));
386
              $db->proteger(implode('|', $p['masque.tag_pictoflora']['OR'])));
383
			}
387
              }
-
 
388
			*/
-
 
389
 
-
 
390
			// ==== XXX: puisque on est bassiné par cette "DEPENDENT SUBQUERY", nous la faisons donc indépendemment ====
-
 
391
			if(isset($p['masque.tag_pictoflora']['AND'])) {
-
 
392
				// optimsation: en cas de "AND" on sort() l'input et le GROUP_CONCAT()
-
 
393
				// donc nous utilisons des ".*" plutôt que de multiples conditions et "|"
-
 
394
				sort($p['masque.tag_pictoflora']['AND']);
-
 
395
 
-
 
396
				// plutôt que db->connexion->query->fetchColumn(), une API pourrie nous oblige à ...
-
 
397
				$ids = $db->recupererTous(sprintf(
-
 
398
					"SELECT ce_image FROM del_image_tag WHERE actif = 1".
-
 
399
					" GROUP BY ce_image".
-
 
400
					" HAVING GROUP_CONCAT(tag_normalise ORDER BY tag_normalise) REGEXP %s",
-
 
401
					$db->proteger(implode('.*', $p['masque.tag_pictoflora']['AND']))));
-
 
402
				// puis:
-
 
403
				$ids = array_map(create_function('$e', 'return $e["ce_image"];'), $ids);
-
 
404
				if($ids) $req['where'][] = sprintf("vdi.id_image IN (%s)", implode(',', $ids));
-
 
405
 
-
 
406
			}
-
 
407
			else {
-
 
408
				$ids = $db->recupererTous(sprintf(
-
 
409
					"SELECT ce_image FROM del_image_tag WHERE actif = 1".
-
 
410
					" GROUP BY ce_image".
-
 
411
					" HAVING GROUP_CONCAT(tag_normalise) REGEXP %s",
-
 
412
					$db->proteger(implode('|', $p['masque.tag_pictoflora']['OR']))));
-
 
413
				$ids = array_map(create_function('$e', 'return $e["ce_image"];'), $ids);
-
 
414
				if($ids) $req['where'][] = sprintf("vdi.id_image IN (%s)", implode(',', $ids));
-
 
415
			}
-
 
416
 
384
		}
417
		}
385
	}
418
	}
Line 386... Line 419...
386
 
419