From 0bb4cbeeade1eaffd8b8c82cf3ef27eb9a0b5295 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sat, 9 Feb 2008 19:55:20 +0000 Subject: [PATCH] =?UTF-8?q?Compl=C3=A9ment=20=C3=A0=20[11901]:=20la=20supp?= =?UTF-8?q?ression=20de=20la=20table=20principale=20dans=20la=20requ=C3=AA?= =?UTF-8?q?te=20lorsque=20celle-ci=20ne=20concerne=20en=20fait=20que=20la?= =?UTF-8?q?=20jointutre=20s'=C3=A9tend=20au=20cas=20de=20plusieurs=20joint?= =?UTF-8?q?ures=20et=20non=20plus=20une=20seule.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Application: trouver dans une hiérarchie la rubrique ayant un mot clé d'un certain groupe: {{{ <BOUCLE2(HIERARCHIE) {id_rubrique} {tout} {type='Squelette'} {inverse} {0,1} {lang_select=non} }}} se compile en {{{ SELECT L1.id_rubrique FROM spip_mots_rubriques AS L1 INNER JOIN spip_mots AS L2 ON (L2.id_mot = L1.id_mot) WHERE (L2.type = 'Squelette') AND (L1.id_rubrique IN (329,589,645)) GROUP BY L1.id_rubrique ORDER BY FIELD(L1.id_rubrique, 329,589,645) DESC LIMIT 0,1 }}} et non plus en {{{ SELECT rubriques.id_rubrique FROM spip_rubriques AS `rubriques` INNER JOIN spip_mots_rubriques AS L1 ON (L1.id_rubrique = rubriques.id_rubrique) INNER JOIN spip_mots AS L2 ON (L2.id_mot = L1.id_mot) WHERE (L2.type = 'Squelette') AND (rubriques.id_rubrique IN (329,589,645)) GROUP BY rubriques.id_rubrique ORDER BY FIELD(rubriques.id_rubrique, 329,589,645) DESC LIMIT 0,1 }}} Il faut le critère {{{ {lang_select=non} }}} autrement le champ lang est mis d'office et empêche la disparition. Il faudrait voir si cette mise d'office e pourrait pas être évitée. --- ecrire/public/composer.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php index 955bb882a6..f1cbddf5f1 100644 --- a/ecrire/public/composer.php +++ b/ecrire/public/composer.php @@ -584,15 +584,14 @@ function calculer_select ($select = array(), $from = array(), list($t,$c) = each($from); reset($from); $e = '/\b(' . "$t\\." . join("|" . $t . '\.', $equiv) . ')\b/'; - if (!( count($equiv) <> 1 OR // a faire sauter un jour - strpos($t, ' ') OR // jointure des le depart cf boucle_doc + if (!(strpos($t, ' ') OR // jointure des le depart cf boucle_doc calculer_jointnul($t, $select, $e) OR calculer_jointnul($t, $join, $e) OR calculer_jointnul($t, $where, $e) OR calculer_jointnul($t, $having, $e))) { unset($from[$t]); // bien garder les espaces pour le strpos ci-dessus - preg_match('/^\s*\w*\s*JOIN\s+(.*?AS\s+(\w+)\s+)ON\s*[(][^.]*[.](\w+)[^)]*[)](.*)$/', $sfrom, $r); + $x = preg_match('/^\s*\w*\s*JOIN\s+(.*?AS\s+(\w+)\s+)ON\s*[(][^.]*[.](\w+)[^)]*[)](.*)$/s', $sfrom, $r); $sfrom = $r[1]. $r[4]; $e = '/\b' . $t . '\.' . $r[3] .'\b/'; $t = $r[2] . '.' . $r[3]; @@ -600,6 +599,8 @@ function calculer_select ($select = array(), $from = array(), $join = remplacer_jointnul($t, $join, $e); $where = remplacer_jointnul($t, $where, $e); $having = remplacer_jointnul($t, $having, $e); + $groupby = remplacer_jointnul($t, $groupby, $e); + $orderby = remplacer_jointnul($t, $orderby, $e); } $from[-1] = $sfrom; } -- GitLab