Skip to content
Extraits de code Groupes Projets
Valider ea8b9ffb rédigé par cerdic's avatar cerdic
Parcourir les fichiers

optimiser les criteres {statut==.*} et optimiser les requetes vides avec jointures sur ARTICLES

<BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
parent 4e42a9b2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -551,7 +551,11 @@ function calculer_select ($select = array(), $from = array(),
$menage = false;
foreach($where as $k => $v) {
if (is_array($v)) $v = $v[0];
if (is_array($v)){
if ((count($v)>=2) && ($v[0]=='REGEXP') && ($v[2]=="'.*'")) $v= false;
elseif ((count($v)>=2) && ($v[0]=='LIKE') && ($v[2]=="'%'")) $v= false;
elseif ($v[0]) $v = $v[0];
}
if ((!$v) OR ($v==1) OR ($v=='0=0')) {
unset($where[$k]);
$menage = true;
......@@ -631,8 +635,9 @@ function calculer_select ($select = array(), $from = array(),
// ou dans
//<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
// qui comporte plusieurs jointures
// cette optimisation ne peut s'appliquer dans aucune boucle articles
// en raison de where ajoutes sur le statut par SPIP lui meme.
// ou dans
// <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
// <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
list($t,$c) = each($from);
reset($from);
......
......@@ -55,7 +55,7 @@ function fabrique_jointures(&$boucle, $res, $cond=false, $desc=array(), $nom='',
}
// la clause Group by est en conflit avec ORDER BY, a completer
if (!$pk) foreach(liste_champs_jointures($nom,$desc) as $id_prim){
if (!$pk) foreach(liste_champs_jointures($nom,$desc,true) as $id_prim){
$id_field = $nom . '.' . $id_prim;
if (!in_array($id_field, $boucle->group)) {
$boucle->group[] = $id_field;
......@@ -72,9 +72,13 @@ function fabrique_jointures(&$boucle, $res, $cond=false, $desc=array(), $nom='',
// http://doc.spip.org/@liste_champs_jointures
function liste_champs_jointures($nom,$desc){
function liste_champs_jointures($nom,$desc,$primary=false){
static $nojoin = array('idx','maj','date','statut');
// si cle primaire demandee, la privilegier
if ($primary && isset($desc['key']['PRIMARY KEY']))
return split_key($desc['key']['PRIMARY KEY']);
// les champs declares explicitement pour les jointures
if (isset($desc['join'])) return $desc['join'];
......@@ -84,7 +88,7 @@ function liste_champs_jointures($nom,$desc){
// si pas de cle, c'est fichu
if (!isset($desc['key'])) return array();
// si cle primaire, la privilegier
// si cle primaire
if (isset($desc['key']['PRIMARY KEY']))
return split_key($desc['key']['PRIMARY KEY']);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter