Changeset 81384 in spip-zone
- Timestamp:
- Mar 14, 2014, 7:43:40 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/tickets/trunk/tickets_fonctions.php
r73520 r81384 314 314 } 315 315 316 // Critere {mots_pargroupe} : "l'article est lie a au moins un mot de tous les groupes demandes" 317 // {mots?} ne s'applique que si au moins un mot est demande 318 /* 319 * ATTENTION, c'est un peu en cours de dev, il faudrait : 320 * - virer la référence aux tickets 321 * - revoir peut être la jonction avec spip_mots 322 * - ne pas écrire directement 'spip_mots'/'spip_mots_liens' si le préfixe est différent ? 323 * - prendre en compte le cas où id_mot[] est un tableau de strings (comme critere_mots) ? 324 */ 325 function critere_mots_pargroupe_dist($idb, &$boucles, $crit,$id_ou_titre=false) { 326 327 $boucle = &$boucles[$idb]; 328 329 if (isset($crit->param[0][0])) { 330 $mots = calculer_liste(array($crit->param[0][0]), array(), $boucles, $boucles[$idb]->id_parent); 331 } else{ 332 $mots = '@$Pile[0]["mots"]'; 333 } 334 335 $t = $boucle->id_table . '.' . $boucle->primary; 336 if (!in_array($t, $boucles[$idb]->select)) 337 $boucle->select[]= $t; # pour postgres, neuneu ici 338 339 /* On calcule la liste des groupes 340 * 341 * SELECT id_groupe 342 * FROM spip_mots 343 * WHERE id_mot IN (1,2,3) 344 * GROUP BY id_groupe 345 */ 346 $groupes = "'('.sql_get_select('id_groupe','spip_mots',sql_in('id_mot',".$mots."),'id_groupe').') AS g'"; 347 348 /* Maintenant le nombre de groupes 349 * 350 * SELECT COUNT(id_groupe) 351 * FROM ($groupes) AS nb 352 */ 353 $nb_groupes = "('.sql_get_select('COUNT(id_groupe)',".$groupes.").')"; 354 355 /* Maintenant les doublets (id_objet,id_groupe) 356 * 357 * attention : on écrit directement JOIN dans le code, peut être 358 * qu'il faudrait faire plus gaffe à la compatibilité SQL ? 359 * 360 * SELECT ml.id_objet,m.id_groupe 361 * FROM spip_mots_liens AS ml 362 * JOIN spip_mots AS m USING (id_mot) 363 * WHERE ml.objet='ticket' 364 * AND ml.id_mot IN (1,2,3) 365 * GROUP BY ml.id_objet,ml.objet,m.id_groupe 366 */ 367 $doublets = "'('.sql_get_select('id_objet,id_groupe','spip_mots_liens JOIN spip_mots USING (id_mot)','objet=\'ticket\' AND '.sql_in('id_mot',".$mots."),'id_objet,objet,id_groupe').') AS d'"; 368 369 /* Enfin, la boucle complete 370 * SELECT id_objet 371 * FROM ( 372 * SELECT id_objet,id_groupe 373 * FROM spip_mots_liens AS ml 374 * JOIN spip_mots AS m USING (id_mot) 375 * WHERE objet='ticket' 376 * AND id_mot IN (1,2,3) 377 * GROUP BY id_objet,objet,id_groupe 378 * ) AS d 379 * GROUP BY id_objet 380 * HAVING SUM(1) >= ( 381 * SELECT COUNT(*) 382 * FROM ( 383 * SELECT id_groupe 384 * FROM spip_mots 385 * WHERE id_mot IN (1,2,3) 386 * GROUP BY id_groupe 387 * ) AS g 388 * ) 389 */ 390 $where = "sql_get_select('id_objet',".$doublets.",'','id_objet','','','SUM(1) >= ".$nb_groupes."')"; 391 392 /* On ajoute ce critère à la boucle (TICKETS) 393 * 394 */ 395 $boucle->where[] = "sql_in('id_ticket', ".$where.")"; 396 397 } 398 316 399 ?>
Note: See TracChangeset
for help on using the changeset viewer.