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 |
}
|