Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1490 Rev 1491
Line 369... Line 369...
369
			// pas de LEFT JOIN ? ou bien peut-être en cas de tri, mais nous parlons bien ici d'un masque
369
			// pas de LEFT JOIN ? ou bien peut-être en cas de tri, mais nous parlons bien ici d'un masque
370
			/* $req['join'][] = 'LEFT JOIN del_image_tag dit ON dit.ce_image = vdi.id_image';
370
			/* $req['join'][] = 'LEFT JOIN del_image_tag dit ON dit.ce_image = vdi.id_image';
371
			   $req['where'][] = 'dit.actif = 1'; */
371
			   $req['where'][] = 'dit.actif = 1'; */
Line -... Line 372...
-
 
372
 
-
 
373
 
-
 
374
            // Note à propos des 4 "@ instruction" ci-dessous (notamment sur recupererTous())
-
 
375
            // REGEXP permet un puissant mécanisme de sélection des obs/image à qui sait
-
 
376
            // l'utiliser, mais peut sortir une erreur en cas de REGEXP invalide
-
 
377
            // ex: REGEX "^(".
-
 
378
            // Pour l'heure nous ignorons ce type d'erreur car aucun de nos champ de recherche
-
 
379
            // ne peuvent (ou ne devrait) comporter des meta-caractères
Line 372... Line 380...
372
 
380
            // ([])?*+\\
373
 
381
 
374
 
382
 
375
			// ==== commenté pour l'instant pour cause de soucis d'optimiseur MySQL (cf commentaire en intro) ====
383
			// ==== commenté pour l'instant pour cause de soucis d'optimiseur MySQL (cf commentaire en intro) ====
Line 396... Line 404...
396
				// optimsation: en cas de "AND" on sort() l'input et le GROUP_CONCAT()
404
				// optimsation: en cas de "AND" on sort() l'input et le GROUP_CONCAT()
397
				// donc nous utilisons des ".*" plutôt que de multiples conditions et "|"
405
				// donc nous utilisons des ".*" plutôt que de multiples conditions et "|"
398
				sort($p['masque.tag_pictoflora']['AND']);
406
				sort($p['masque.tag_pictoflora']['AND']);
Line 399... Line 407...
399
 
407
 
400
				// plutôt que db->connexion->query->fetchColumn(), une API pourrie nous oblige à ...
408
				// plutôt que db->connexion->query->fetchColumn(), une API pourrie nous oblige à ...
401
				$ids = $db->recupererTous(sprintf(
409
				$ids = @$db->recupererTous(sprintf(
402
					"SELECT ce_image FROM del_image_tag WHERE actif = 1".
410
					"SELECT ce_image FROM del_image_tag WHERE actif = 1".
403
					" GROUP BY ce_image".
411
					" GROUP BY ce_image".
404
					" HAVING GROUP_CONCAT(tag_normalise ORDER BY tag_normalise) REGEXP %s",
412
					" HAVING GROUP_CONCAT(tag_normalise ORDER BY tag_normalise) REGEXP %s",
-
 
413
					$db->proteger(implode('.*', $p['masque.tag_pictoflora']['AND']))));
405
					$db->proteger(implode('.*', $p['masque.tag_pictoflora']['AND']))));
414
 
406
				// puis:
415
				// puis:
407
				$ids = array_map(create_function('$e', 'return $e["ce_image"];'), $ids);
416
				$ids = @array_map(create_function('$e', 'return $e["ce_image"];'), $ids);
Line 408... Line 417...
408
				if($ids) $req['where'][] = sprintf("vdi.id_image IN (%s)", implode(',', $ids));
417
				if($ids) $req['where'][] = sprintf("vdi.id_image IN (%s)", implode(',', $ids));
409
 
418
 
410
			}
419
			}
411
			else {
420
			else {
412
				$ids = $db->recupererTous(sprintf(
421
				$ids = @$db->recupererTous(sprintf(
413
					"SELECT ce_image FROM del_image_tag WHERE actif = 1".
422
					"SELECT ce_image FROM del_image_tag WHERE actif = 1".
414
					" GROUP BY ce_image".
423
					" GROUP BY ce_image".
-
 
424
					" HAVING GROUP_CONCAT(tag_normalise) REGEXP %s",
415
					" HAVING GROUP_CONCAT(tag_normalise) REGEXP %s",
425
					$db->proteger(implode('|', $p['masque.tag_pictoflora']['OR']))));
416
					$db->proteger(implode('|', $p['masque.tag_pictoflora']['OR']))));
426
 
417
				$ids = array_map(create_function('$e', 'return $e["ce_image"];'), $ids);
427
				$ids = @array_map(create_function('$e', 'return $e["ce_image"];'), $ids);
Line 418... Line 428...
418
				if($ids) $req['where'][] = sprintf("vdi.id_image IN (%s)", implode(',', $ids));
428
				if($ids) $req['where'][] = sprintf("vdi.id_image IN (%s)", implode(',', $ids));
419
			}
429
			}