From fdbe184d80303eb5b3e251111e88cae7d9dde891 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Wed, 22 Mar 2006 20:29:04 +0000 Subject: [PATCH] =?UTF-8?q?Group=20by=20n=C3=A9cessaire=20quand=20meme=20s?= =?UTF-8?q?i=20la=20cl=C3=A9=20de=20jointure=20est=20optionnelle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/public/criteres.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index d6d4bb1c02..8bcbb610b4 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -298,7 +298,7 @@ function critere_par_jointure(&$boucle, $champ) $cle = trouver_champ_exterieur($champ, $boucle->jointures, $boucle); if ($cle) - $cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle); + $cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle, false); if ($cle) $t = "L$cle"; // sinon erreur } return "'" . $t . '.' . $champ . "'"; @@ -583,7 +583,7 @@ function calculer_critere_externe_init(&$boucle, $col, $desc, $crit) } if ($t) return $t; } - $cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle, $col); + $cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle, $col, $crit->cond); if ($cle) return "L$cle"; } @@ -597,7 +597,7 @@ function calculer_critere_externe_init(&$boucle, $col, $desc, $crit) // deduction automatique des jointures // une jointure sur une table avec primary key doit se faire sur celle-ci. -function calculer_jointure(&$boucle, $depart, $arrivee, $col='') +function calculer_jointure(&$boucle, $depart, $arrivee, $col='', $cond) { static $num=0; $res = calculer_chaine_jointures($boucle, $depart, $arrivee); @@ -607,7 +607,7 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='') $id_primary = $ddesc['key']['PRIMARY KEY']; $id_field = $dnom . '.' . $id_primary; $id_table = ""; - + spip_log("cj $col $id_primary"); foreach($res as $r) { list($d, $a, $j) = $r; $num++; @@ -617,10 +617,10 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='') // pas besoin de group by // si une seule jointure et sur une table primary key formee - // de l'index principal et de l'index de jointure + // de l'index principal et de l'index de jointure (non conditionnel! [6031]) // cf http://article.gmane.org/gmane.comp.web.spip.devel/30555 - // - if ($pk = (count($res) == 1)) { + + if ($pk = (count($res) == 1) && !$cond) { if ($pk = $a[1]['key']['PRIMARY KEY']) { $pk=preg_match("/^$id_primary, *$col$/", $pk) OR preg_match("/^$col, *$id_primary$/", $pk); -- GitLab