Skip to content
Extraits de code Groupes Projets
Valider 9d28da61 rédigé par esj's avatar esj
Parcourir les fichiers

Si une boucle a plusieurs critères doublons, les fusionner pour n'avoir qu'une...

Si une boucle a plusieurs critères doublons, les fusionner pour n'avoir qu'une seul IN. Ce serait encore mieux d'arriver à éliminer les répétitions éventuellement induites (le summum du ridicule est atteint avec {doublons}{doublons}) car il n'est vraiment pas sûr que les serveurs SQL le fassent.
parent eb90d8af
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -55,21 +55,41 @@ function critere_exclus_dist($idb, &$boucles, $crit) { ...@@ -55,21 +55,41 @@ function critere_exclus_dist($idb, &$boucles, $crit) {
// http://doc.spip.org/@critere_doublons_dist // http://doc.spip.org/@critere_doublons_dist
function critere_doublons_dist($idb, &$boucles, $crit) { function critere_doublons_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb]; $boucle = &$boucles[$idb];
if (!$boucle->primary) $primary = $boucle->primary;
if (!$primary)
erreur_squelette(_T('zbug_doublon_table_sans_index'), "BOUCLE$idb"); erreur_squelette(_T('zbug_doublon_table_sans_index'), "BOUCLE$idb");
$not = ($crit->not ? '' : 'NOT');
$nom = !isset($crit->param[0]) ? "''" : calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent); $nom = !isset($crit->param[0]) ? "''" : calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
// mettre un tableau pour que ce ne soit pas vu comme une constante // mettre un tableau pour que ce ne soit pas vu comme une constante
$boucle->where[]= array("sql_in('".$boucle->id_table . '.' . $boucle->primary .
"', " . $nom = "'" .
'$doublons[' .
($crit->not ? '' : ($boucle->doublons . "[]= ")) .
"('" .
$boucle->type_requete . $boucle->type_requete .
"'" . "'" .
($nom == "''" ? '' : " . $nom") . ($nom == "''" ? '' : " . $nom");
')], \'' .
($crit->not ? '' : 'NOT') . $debutdoub = '$doublons['
"')"); . (!$not ? '' : ($boucle->doublons . "[]= "));
$findoub = "($nom)]";
$debin = "sql_in('" . $boucle->id_table . '.' . $primary . "', ";
$suitin = $debin . $debutdoub;
// si autre critere doublon, fusionner pour avoir un seul In
foreach ($boucle->where as $k => $w) {
if (strpos($w[0], $suitin) ===0) {
$boucle->where[$k][0] = $debin . $debutdoub . $findoub . ' . ' . substr($w[0],strlen($debin));
return;
}
}
$boucle->where[]= array($suitin . $findoub . ", '" . $not . "')");
# la ligne suivante avait l'intention d'eviter une collecte deja faite # la ligne suivante avait l'intention d'eviter une collecte deja faite
# mais elle fait planter une boucle a 2 critere doublons: # mais elle fait planter une boucle a 2 critere doublons:
# {!doublons A}{doublons B} # {!doublons A}{doublons B}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter