From 5537d313233def283501a96ae87b49d0cbbb0b8b Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Wed, 10 May 2006 16:30:27 +0000 Subject: [PATCH] =?UTF-8?q?le=20chemin=20de=20jointure=20etait=20loin=20d'?= =?UTF-8?q?etre=20le=20plus=20direct=20(critique=20avec=20des=20jointures?= =?UTF-8?q?=20ajout=C3=A9es=20par=20les=20plugins=20forms=20ou=20agenda)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/public/criteres.php | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index b9b27d7d05..14d816f359 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -703,10 +703,12 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='', $cond=false) return $n; } -function calculer_chaine_jointures(&$boucle, $depart, $arrivee, $vu=array()) +function calculer_chaine_jointures(&$boucle, $depart, $arrivee, $vu=array(), $milieu_prec = false) { list($dnom,$ddesc) = $depart; list($anom,$adesc) = $arrivee; + if (!count($vu)) + $vu[] = $dnom; // ne pas oublier la table de depart $keys = $ddesc['key']; if ($v = $adesc['key']['PRIMARY KEY']) { @@ -727,14 +729,16 @@ function calculer_chaine_jointures(&$boucle, $depart, $arrivee, $vu=array()) ($def = trouver_def_table($v, $boucle))) { list($table,$join) = $def; $milieu = array_intersect($ddesc['key'], trouver_cles_table($join['key'])); - foreach ($milieu as $k) { - $new[] = $v; - $r = calculer_chaine_jointures($boucle, array($table, $join), $arrivee, $new); - if ($r) { - array_unshift($r, array($dnom, $def, $k)); - return $r; + $new[] = $v; + foreach ($milieu as $k) + if ($k!=$milieu_prec) // ne pas repasser par la meme cle car c'est un chemin inutilement long + { + $r = calculer_chaine_jointures($boucle, array($v, $join), $arrivee, $new, $k); + if ($r) { + array_unshift($r, array($dnom, $def, $k)); + return $r; + } } - } } } } -- GitLab