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