diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index d6d4bb1c0288c443cc408f81087e1a63d3ee9a26..8bcbb610b4551597da5939c0a0e8620423e48fb1 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);