Changeset 86428 in spip-zone for _plugins_/fulltext


Ignore:
Timestamp:
Dec 3, 2014, 4:05:34 PM (5 years ago)
Author:
kent1@…
Message:

Un autre type de jointure qui devrait fonctionner :

cas simple : $cle_depart dans la table_liee

Ce cas pourrait exister par exemple si on activait une jointure de recherche sur les articles avec la table spip_evenements du plugin agenda.
Il suffirait d'ajouter la ligne suivante dans le pipeline "declarer_tables_objets_sql" dans le fichier base/agenda_evenements :
$tablesspip_articles?rechercher_jointures?evenement? = array('titre' => 8, 'descriptif' => 5, 'lieu' => 5, 'adresse' => 3);

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fulltext/trunk/inc/recherche_to_array.php

    r85863 r86428  
    154154                $from = array_pop($requete['FROM']);
    155155
    156                 if (isset($jointures[$table])
    157                        
    158                         ) {
     156                if (isset($jointures[$table])) {
    159157                        include_spip('action/editer_liens');
    160158                        $trouver_table = charger_fonction('trouver_table','base');
     
    164162                        $depart_associable = objet_associable($table);
    165163                        $i = 0;
    166 
    167164                        foreach ($jointures[$table] as $table_liee => $champs) {
    168165                                $i++;
     
    177174                                        $table_arrivee = table_objet($table_liee,$serveur);
    178175                                        $desc_arrivee = $trouver_table($table_arrivee,$serveur);
    179                                         // cas simple : $cle_depart dans la table_liee
     176                                        /**
     177                                         * cas simple : $cle_depart dans la table_liee
     178                                         *
     179                                         * Ce cas pourrait exister par exemple si on activait une jointure de recherche sur les articles avec la table spip_evenements du plugin agenda.
     180                                         * Il suffirait d'ajouter la ligne suivante dans le pipeline "declarer_tables_objets_sql" dans le fichier base/agenda_evenements :
     181                                         * $tables['spip_articles']['rechercher_jointures']['evenement'] = array('titre' => 8, 'descriptif' => 5, 'lieu' => 5, 'adresse' => 3);
     182                                         *
     183                                         */
    180184                                        if (isset($desc_arrivee['field'][$cle_depart])){
    181                                                 //$s = sql_select("$cle_depart, $cle_arrivee", $desc_arrivee['table_sql'], sql_in($cle_arrivee, array_keys($ids_trouves)), '','','','',$serveur);
     185                                                $join = "
     186                                                        LEFT JOIN (
     187                                                        SELECT lien$i.$cle_depart,$subscore AS score
     188                                                        FROM ".$desc_depart['table_sql']." as lien$i
     189                                                        JOIN ".$desc_arrivee['table_sql']." as obj$i ON obj$i.$cle_depart=lien$i.$cle_depart
     190                                                        WHERE $subscore > 0
     191                                                        ORDER BY score DESC LIMIT 100
     192                                                        ) AS o$i ON o$i.$cle_depart=t.$cle_depart";
     193                                                $score[] = "IF(SUM(o".$i.".score) IS NULL,0,SUM(o".$i.".score))";
     194                                                $from .= $join;
    182195                                        }
    183196                                        // cas simple : $cle_arrivee dans la table
Note: See TracChangeset for help on using the changeset viewer.