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

Complément à [11901]: la suppression de la table principale dans la requête...

Complément à [11901]: la suppression de la table principale dans la requête lorsque celle-ci ne concerne en fait que la jointutre s'étend au cas de plusieurs jointures et non plus une seule.

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.
parent 4e3c9c53
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -584,15 +584,14 @@ function calculer_select ($select = array(), $from = array(), ...@@ -584,15 +584,14 @@ function calculer_select ($select = array(), $from = array(),
list($t,$c) = each($from); list($t,$c) = each($from);
reset($from); reset($from);
$e = '/\b(' . "$t\\." . join("|" . $t . '\.', $equiv) . ')\b/'; $e = '/\b(' . "$t\\." . join("|" . $t . '\.', $equiv) . ')\b/';
if (!( count($equiv) <> 1 OR // a faire sauter un jour if (!(strpos($t, ' ') OR // jointure des le depart cf boucle_doc
strpos($t, ' ') OR // jointure des le depart cf boucle_doc
calculer_jointnul($t, $select, $e) OR calculer_jointnul($t, $select, $e) OR
calculer_jointnul($t, $join, $e) OR calculer_jointnul($t, $join, $e) OR
calculer_jointnul($t, $where, $e) OR calculer_jointnul($t, $where, $e) OR
calculer_jointnul($t, $having, $e))) { calculer_jointnul($t, $having, $e))) {
unset($from[$t]); unset($from[$t]);
// bien garder les espaces pour le strpos ci-dessus // 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]; $sfrom = $r[1]. $r[4];
$e = '/\b' . $t . '\.' . $r[3] .'\b/'; $e = '/\b' . $t . '\.' . $r[3] .'\b/';
$t = $r[2] . '.' . $r[3]; $t = $r[2] . '.' . $r[3];
...@@ -600,6 +599,8 @@ function calculer_select ($select = array(), $from = array(), ...@@ -600,6 +599,8 @@ function calculer_select ($select = array(), $from = array(),
$join = remplacer_jointnul($t, $join, $e); $join = remplacer_jointnul($t, $join, $e);
$where = remplacer_jointnul($t, $where, $e); $where = remplacer_jointnul($t, $where, $e);
$having = remplacer_jointnul($t, $having, $e); $having = remplacer_jointnul($t, $having, $e);
$groupby = remplacer_jointnul($t, $groupby, $e);
$orderby = remplacer_jointnul($t, $orderby, $e);
} }
$from[-1] = $sfrom; $from[-1] = $sfrom;
} }
......
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