Jointure automatique

Bonjour,

Je suis en train de rajouter plusieurs tables à Spip et j'aimerais faire des jointures sur ces tables et tout ca dans le cadre d'un plugin.

J'ai donc utilisé les pipelines
declarer_tables_principales,
declarer_tables_auxiliaires
et declarer_tables_interfaces.

Quand je fais une boucle MAISONS, je voudrais récupérer le nom et l'id de la chambre.

<BOUCLE_maison(MAISONS){tout}>
#ID_MAISON #NOM_MAISON
<br/>
#ID_CHAMBRE #NOM_CHAMBRE
<br/>
</BOUCLE_maison>

Cette boucle ne fonctionne pas.

Pourquoi Spip ne fait pas la jointure avec les tables que je lui ai données dans le pipeline declarer_tables_interfaces ?

A quoi servent ces tables si Spip ne fait pas le lien ?

Je suis allé voir là http://doc.spip.org/@Declarer-et-ajouter-des-tables et là http://www.spip-contrib.net/Acces-SPIP-aux-tables-externes-et mais au bout d'une journée, je n'ai toujours pas compris l'objectif du mécanisme.

Merci d'avance pour vos réponses

Voici le code pour mes pipelines :

function csdd_declarer_tables_interfaces($interface){
  $interface['tables_jointures']['spip_maisons']['id_maison']='maison_chambre';
  $interface['tables_jointures']['spip_chambres']['id_chambre']='maison_chambre';
  
  $interface['table_des_tables']['chambres']='chambres';
  $interface['table_des_tables']['maisons']='maisons';
  
  return $interface;
}

function csdd_declarer_tables_principales($tables_principales){
  $spip_chambres = array(
    "id_chambre" => "bigint(21) NOT NULL",
    "nom_chambre" => "varchar(255) NOT NULL DEFAULT ''");
  
  $spip_chambres_key = array(
    "PRIMARY KEY" => "id_chambre");
    
  $spip_chambres_join = array(
    "id_chambre" => "id_chambre");
  
  $tables_principales['spip_chambres'] = array(
    'field' => &$spip_chambres,
    'key' => &$spip_chambres_key,
    'join' => &$spip_chambres_join);
  
  $spip_maisons = array(
    "id_maison" => "bigint(21) NOT NULL",
    "nom_maison" => "varchar(255) NOT NULL DEFAULT ''");
  
  $spip_maisons_key = array(
    "PRIMARY KEY" => "id_maison");
  
  $spip_maisons_join = array(
    "id_maison" => "id_maison");
  
  $tables_principales['spip_maisons'] = array(
    'field' => &$spip_maisons,
    'key' => &$spip_maisons_key,
    'join' => &$spip_maisons_join);
    
  return $tables_principales;
}

function csdd_declarer_tables_auxiliaires($tables_auxiliaires){
  $spip_maison_chambre = array(
    "id_maison" => "bigint(21) NOT NULL",
    "id_chambre" => "bigint(21) NOT NULL");
  
  $spip_maison_chambre_key = array(
    "PRIMARY KEY" => "id_maison, id_chambre",
    "KEY id_chambre" => "id_chambre");
  
  $tables_auxiliaires['spip_maison_chambre'] = array(
    'field' => &$spip_maison_chambre,
    'key' => &$spip_maison_chambre_key);
  
  return $tables_auxiliaires;
}

Le 10/02/2010 09:49, Etienne Canuel a écrit :

Je suis en train de rajouter plusieurs tables à Spip et j'aimerais faire
des jointures sur ces tables et tout ca dans le cadre d'un plugin.

Je suis allé voir là http://doc.spip.org/@Declarer-et-ajouter-des-tables
et là Accés SPIP aux tables non-SPIP et jointures - SPIP-Contrib mais
au bout d'une journée, je n'ai toujours pas compris l'objectif du
mécanisme.

Regarde le code d'un plugin qui réussit à le faire ...
As tu vu la doc de Marcimat sur les chats aussi ?

JLuc

Le 2010-02-10 15:02, JLuc a écrit :

Le 10/02/2010 09:49, Etienne Canuel a écrit :

Je suis en train de rajouter plusieurs tables à Spip et j'aimerais faire
des jointures sur ces tables et tout ca dans le cadre d'un plugin.

Je suis allé voir là http://doc.spip.org/@Declarer-et-ajouter-des-tables
et là Accés SPIP aux tables non-SPIP et jointures - SPIP-Contrib mais
au bout d'une journée, je n'ai toujours pas compris l'objectif du
mécanisme.

Regarde le code d'un plugin qui réussit à le faire ...
As tu vu la doc de Marcimat sur les chats aussi ?

JLuc

J'ai vue la doc de Marcimat sur les chat mais ca ne correspond pas à mon problème.

J'ai plutôt regardé le plugin Inscription 2 qui créer une table pour étendre les champs de la table AUTEURS et également

La boucle AUTEURS est surchargée pour accéder au champs de la table auteur_elargis. Une jointure est rajoutée dans la boucle.

Pourquoi doit on alors déclarer les relations de jointure dans $tables_jointures si ensuite on surcharge la boucle ?
ex:
$interface['tables_jointures']['spip_auteurs'] = 'auteurs_elargis';

Je suis tombé sur cet article

Je ne sais pas s'il est à jour mais il dit :

$table_des_jointures :

Sert à SPIP pour relier automatiquement 2 tables, ce qui fait que si on fait une boucle <boucle_bb(TABLE1)>#CHAMP_TABLE_2</boucle_bb>, SPIP fera automatiquement la liaison entre les 2 tables, à condition évidemment qu’elles aient une colonne de nom identique, par exemple "id_rubrique" toutes les deux.

Voir par exemple cette page du Carnet : MultiBase

Dans mon cas, j'ai les colonnes identiques mais en bouclant sur MAISONS, je n'arrive pas à obtenir les champs de CHAMBRES tel que #NOM_CHAMBRE

La seule solution que j'ai trouvée c'est d'utiliser $exceptions_des_tables.

Etienne

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j'ai les colonnes identiques mais en bouclant sur MAISONS,
je n'arrive pas à obtenir les champs de CHAMBRES tel que #NOM_CHAMBRE

La seule solution que j'ai trouvée c'est d'utiliser $exceptions_des_tables.

Oui ben ç'a l'air compliqué et je ne peux pas t'aider du tout.

Si tu trouvais comment faire, ce serait super de compléter les pages
que tu as indiqué pour que ça soit plus facile pour les suivants...

Bon courage !
JLuc

Bonjour,

Il faut enlever « spip_ » devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j’ai les colonnes identiques mais en bouclant sur MAISONS,
je n’arrive pas à obtenir les champs de CHAMBRES tel que #NOM_CHAMBRE

La seule solution que j’ai trouvée c’est d’utiliser $exceptions_des_tables.

Oui ben ç’a l’air compliqué et je ne peux pas t’aider du tout.

Si tu trouvais comment faire, ce serait super de compléter les pages
que tu as indiqué pour que ça soit plus facile pour les suivants…

Bon courage !
JLuc


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

J'ai essayé en enlevant spip_ devant mes noms de tables dans 'tables_jointures' mais rien n'y fait.

Voici la requete sql que spip me produit en passant par var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM `spip`.spip_maisons
AS `maisons`

et il dit en clignotant le coquin :
Unknown column 'maisons.id_chambre' in 'field list'

ce que je me doutait bien vue que je veux faire une jointure et que j'ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever "spip_" devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org
<mailto:jluc@no-log.org>> a écrit :

    Le 10/02/2010 15:53, Etienne Canuel a écrit :

        Dans mon cas, j'ai les colonnes identiques mais en bouclant sur
        MAISONS,
        je n'arrive pas à obtenir les champs de CHAMBRES tel que
        #NOM_CHAMBRE

        La seule solution que j'ai trouvée c'est d'utiliser
        $exceptions_des_tables.

    Oui ben ç'a l'air compliqué et je ne peux pas t'aider du tout.

    Si tu trouvais comment faire, ce serait super de compléter les pages
    que tu as indiqué pour que ça soit plus facile pour les suivants...

    Bon courage !
    JLuc

    _______________________________________________
    liste spip
    spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer un
    mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

    Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
    Discuter chez rezo.net

    Documentation de SPIP : http://www.spip.net/

    Irc : de l'aide à toute heure : http://spip.net/irc

Il ne faudrait pas faire qqch comme ça :
<BOUCLE_maison(MAISONS maison_chambre chambres){tout}>
#ID_MAISON #NOM_MAISON


#ID_CHAMBRE #NOM_CHAMBRE


</BOUCLE_maison>

Mais essaie de mettre un « s » à maison_chambre… La jointure se ferait mieux non? (théorie)

Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com> a écrit :

J’ai essayé en enlevant spip_ devant mes noms de tables dans ‹ tables_jointures › mais rien n’y fait.

Voici la requete sql que spip me produit en passant par var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM spip.spip_maisons
AS maisons

et il dit en clignotant le coquin :
Unknown column ‹ maisons.id_chambre › in ‹ field list ›

ce que je me doutait bien vue que je veux faire une jointure et que j’ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever « spip_ » devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org

mailto:[jluc@no-log.org](mailto:jluc@no-log.org)> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j’ai les colonnes identiques mais en bouclant sur
MAISONS,
je n’arrive pas à obtenir les champs de CHAMBRES tel que
#NOM_CHAMBRE

La seule solution que j’ai trouvée c’est d’utiliser
$exceptions_des_tables.

Oui ben ç’a l’air compliqué et je ne peux pas t’aider du tout.

Si tu trouvais comment faire, ce serait super de compléter les pages
que tu as indiqué pour que ça soit plus facile pour les suivants…

Bon courage !
JLuc


liste spip

spip@rezo.net mailto:[spip@rezo.net](mailto:spip@rezo.net) - désabonnement : envoyer un
mail à spip-off@rezo.net mailto:[spip-off@rezo.net](mailto:spip-off@rezo.net)

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

Euh… pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la maison…

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com> a écrit :

Il ne faudrait pas faire qqch comme ça :
<BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

#ID_MAISON #NOM_MAISON


#ID_CHAMBRE #NOM_CHAMBRE


</BOUCLE_maison>

Mais essaie de mettre un « s » à maison_chambre… La jointure se ferait mieux non? (théorie)

Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com> a écrit :

J’ai essayé en enlevant spip_ devant mes noms de tables dans ‹ tables_jointures › mais rien n’y fait.

Voici la requete sql que spip me produit en passant par var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM spip.spip_maisons
AS maisons

et il dit en clignotant le coquin :
Unknown column ‹ maisons.id_chambre › in ‹ field list ›

ce que je me doutait bien vue que je veux faire une jointure et que j’ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever « spip_ » devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org

mailto:[jluc@no-log.org](mailto:jluc@no-log.org)> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j’ai les colonnes identiques mais en bouclant sur
MAISONS,
je n’arrive pas à obtenir les champs de CHAMBRES tel que
#NOM_CHAMBRE

La seule solution que j’ai trouvée c’est d’utiliser
$exceptions_des_tables.

Oui ben ç’a l’air compliqué et je ne peux pas t’aider du tout.

Si tu trouvais comment faire, ce serait super de compléter les pages
que tu as indiqué pour que ça soit plus facile pour les suivants…

Bon courage !
JLuc


liste spip

spip@rezo.net mailto:[spip@rezo.net](mailto:spip@rezo.net) - désabonnement : envoyer un
mail à spip-off@rezo.net mailto:[spip-off@rezo.net](mailto:spip-off@rezo.net)

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
http://archives.rezo.net/spip.mbox/

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

Je viens d'essayer en mettant un s à ma table de jointure mais rien n'y fait.

Si j'ecris ma boucle de la façon que tu me propose, je n'ai aucun intérêt à créer une table de jointure, autant insérer directement un champ id_maison dans la table Chambres

Je pensais qu'en référençant mes tables dans table_jointures je n'aurais pas à faire ce genre de manip.

C'est pour ça que je ne comprend pas à quoi sert la table des jointures si SPIP ne l'utilise pas automatiquement.

Le 2010-02-10 18:38, Teddy Payet a écrit :

Euh... pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la
maison...

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com
<mailto:teddy.spip@gmail.com>> a écrit :

    Il ne faudrait pas faire qqch comme ça :
    <BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

    #ID_MAISON #NOM_MAISON
    <br/>
    #ID_CHAMBRE #NOM_CHAMBRE
    <br/>
    </BOUCLE_maison>

    Mais essaie de mettre un "s" à maison_chambre... La jointure se
    ferait mieux non? (théorie)

    Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com
    <mailto:etienne.canuel@gmail.com>> a écrit :

        J'ai essayé en enlevant spip_ devant mes noms de tables dans
        'tables_jointures' mais rien n'y fait.

        Voici la requete sql que spip me produit en passant par
        var_profile=1 :

        SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
        FROM `spip`.spip_maisons
        AS `maisons`

        et il dit en clignotant le coquin :
        Unknown column 'maisons.id_chambre' in 'field list'

        ce que je me doutait bien vue que je veux faire une jointure et
        que j'ai les ai déclarées dans la table.

        Je ne comprend pas bien le fonctionnement.

        Merci pour votre attention.

        Le 2010-02-10 17:44, Teddy Payet a écrit :

            Bonjour,

            Il faut enlever "spip_" devant le nom de tes tables.
            cf. : http://programmer.spip.org/declarer_tables_interfaces,379

            Le 10 février 2010 17:31, JLuc <jluc@no-log.org
            <mailto:jluc@no-log.org>
            <mailto:jluc@no-log.org>> a écrit :

                Le 10/02/2010 15:53, Etienne Canuel a écrit :

                    Dans mon cas, j'ai les colonnes identiques mais en
            bouclant sur
                    MAISONS,
                    je n'arrive pas à obtenir les champs de CHAMBRES tel que
                    #NOM_CHAMBRE

                    La seule solution que j'ai trouvée c'est d'utiliser
                    $exceptions_des_tables.

                Oui ben ç'a l'air compliqué et je ne peux pas t'aider du
            tout.

                Si tu trouvais comment faire, ce serait super de
            compléter les pages
                que tu as indiqué pour que ça soit plus facile pour les
            suivants...

                Bon courage !
                JLuc

                _______________________________________________
                liste spip
            spip@rezo.net <mailto:spip@rezo.net> <mailto:spip@rezo.net
            <mailto:spip@rezo.net>> - désabonnement : envoyer un
                mail à spip-off@rezo.net <mailto:spip-off@rezo.net>
            <mailto:spip-off@rezo.net>

                Infos et archives :
            http://listes.rezo.net/mailman/listinfo/spip
            Discuter chez rezo.net

                Documentation de SPIP : http://www.spip.net/

                Irc : de l'aide à toute heure : http://spip.net/irc

        _______________________________________________
        liste spip
        spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer
        un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

        Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
        Discuter chez rezo.net

        Documentation de SPIP : http://www.spip.net/

        Irc : de l'aide à toute heure : http://spip.net/irc

Il faut laisser le préfixe spip_ .
Vu dans la doc:

$interface['tables_jointures']['spip_nom'] = 'autre_table';
$interface['tables_jointures']['spip_nom']['colonne'] = 'autre_table';
// exemples
// {id_mot} sur ARTICLES
$interface['tables_jointures']['spip_articles']= 'mots_articles';
$interface['tables_jointures']['spip_articles']= 'mots';
// jointures evenements (plugin agenda) sur les mots ou articles
$interface['tables_jointures']['spip_evenements']= 'mots'; // a placer avant la jointure sur articles
$interface['tables_jointures']['spip_evenements'] = 'articles';
$interface['tables_jointures']['spip_evenements'] = 'mots_evenements';
// jointures articles vers evenements
$interface['tables_jointures']['spip_articles'] = 'evenements';

Bernard

Etienne Canuel a écrit :

Je viens d'essayer en mettant un s à ma table de jointure mais rien n'y fait.

Si j'ecris ma boucle de la façon que tu me propose, je n'ai aucun intérêt à créer une table de jointure, autant insérer directement un champ id_maison dans la table Chambres

Je pensais qu'en référençant mes tables dans table_jointures je n'aurais pas à faire ce genre de manip.

C'est pour ça que je ne comprend pas à quoi sert la table des jointures si SPIP ne l'utilise pas automatiquement.

Le 2010-02-10 18:38, Teddy Payet a écrit :

Euh... pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la
maison...

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com
<mailto:teddy.spip@gmail.com>> a écrit :

    Il ne faudrait pas faire qqch comme ça :
    <BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

    #ID_MAISON #NOM_MAISON
    <br/>
    #ID_CHAMBRE #NOM_CHAMBRE
    <br/>
    </BOUCLE_maison>

    Mais essaie de mettre un "s" à maison_chambre... La jointure se
    ferait mieux non? (théorie)

    Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com
    <mailto:etienne.canuel@gmail.com>> a écrit :

        J'ai essayé en enlevant spip_ devant mes noms de tables dans
        'tables_jointures' mais rien n'y fait.

        Voici la requete sql que spip me produit en passant par
        var_profile=1 :

        SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
        FROM `spip`.spip_maisons
        AS `maisons`

        et il dit en clignotant le coquin :
        Unknown column 'maisons.id_chambre' in 'field list'

        ce que je me doutait bien vue que je veux faire une jointure et
        que j'ai les ai déclarées dans la table.

        Je ne comprend pas bien le fonctionnement.

        Merci pour votre attention.

        Le 2010-02-10 17:44, Teddy Payet a écrit :

            Bonjour,

            Il faut enlever "spip_" devant le nom de tes tables.
            cf. : http://programmer.spip.org/declarer_tables_interfaces,379

            Le 10 février 2010 17:31, JLuc <jluc@no-log.org
            <mailto:jluc@no-log.org>
            <mailto:jluc@no-log.org>> a écrit :

                Le 10/02/2010 15:53, Etienne Canuel a écrit :

                    Dans mon cas, j'ai les colonnes identiques mais en
            bouclant sur
                    MAISONS,
                    je n'arrive pas à obtenir les champs de CHAMBRES tel que
                    #NOM_CHAMBRE

                    La seule solution que j'ai trouvée c'est d'utiliser
                    $exceptions_des_tables.

                Oui ben ç'a l'air compliqué et je ne peux pas t'aider du
            tout.

                Si tu trouvais comment faire, ce serait super de
            compléter les pages
                que tu as indiqué pour que ça soit plus facile pour les
            suivants...

                Bon courage !
                JLuc

                _______________________________________________
                liste spip
            spip@rezo.net <mailto:spip@rezo.net> <mailto:spip@rezo.net
            <mailto:spip@rezo.net>> - désabonnement : envoyer un
                mail à spip-off@rezo.net <mailto:spip-off@rezo.net>
            <mailto:spip-off@rezo.net>

                Infos et archives :
            http://listes.rezo.net/mailman/listinfo/spip
            Discuter chez rezo.net

                Documentation de SPIP : http://www.spip.net/

                Irc : de l'aide à toute heure : http://spip.net/irc

        _______________________________________________
        liste spip
        spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer
        un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

        Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
        Discuter chez rezo.net

        Documentation de SPIP : http://www.spip.net/

        Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

--
Bernard Blazin - Développement Internet Ingénieur ENSAM promo 1978

Bernard Blazin Point Com

9 rue de la Rose
77320 Montolivet
Tel 01 64 20 98 49
http://www.bernardblazin.com

Est ce que les tables de jointures permettent de faire ça ?

TABLE1 #CHAMP10 #CHAMP11

TABLE2 #CHAMP20 #CHAMP21

$interface['tables_jointures']['spip_TABLE1']= 'TABLE2';

$interface['tables_jointures']['spip_TABLE2']= 'TABLE1';

<BOUCLE_test(TABLE1){tout}>
#CHAMP10
#CHAMP11
#CHAMP20
#CHAMP21
</BOUCLE_test>

En bouclant sur TABLE1, on récupèrent les champs des deux tables TABLE1 et TABLE2 parce qu'on a déclaré la jointure.

Et si les tables de jointures ne servent pas à ça, dans quels cas sont elles utilisées ?

Etienne

Le 2010-02-10 20:05, Bernard Blazin a écrit :

Il faut laisser le préfixe spip_ .
Vu dans la doc:

$interface['tables_jointures']['spip_nom'] = 'autre_table';
$interface['tables_jointures']['spip_nom']['colonne'] = 'autre_table';
// exemples
// {id_mot} sur ARTICLES
$interface['tables_jointures']['spip_articles']= 'mots_articles';
$interface['tables_jointures']['spip_articles']= 'mots';
// jointures evenements (plugin agenda) sur les mots ou articles
$interface['tables_jointures']['spip_evenements']= 'mots'; // a placer
avant la jointure sur articles
$interface['tables_jointures']['spip_evenements'] = 'articles';
$interface['tables_jointures']['spip_evenements'] = 'mots_evenements';
// jointures articles vers evenements
$interface['tables_jointures']['spip_articles'] = 'evenements';

Bernard

Etienne Canuel a écrit :

Je viens d'essayer en mettant un s à ma table de jointure mais rien
n'y fait.

Si j'ecris ma boucle de la façon que tu me propose, je n'ai aucun
intérêt à créer une table de jointure, autant insérer directement un
champ id_maison dans la table Chambres

Je pensais qu'en référençant mes tables dans table_jointures je
n'aurais pas à faire ce genre de manip.

C'est pour ça que je ne comprend pas à quoi sert la table des
jointures si SPIP ne l'utilise pas automatiquement.

Le 2010-02-10 18:38, Teddy Payet a écrit :

Euh... pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la
maison...

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com
<mailto:teddy.spip@gmail.com>> a écrit :

Il ne faudrait pas faire qqch comme ça :
<BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

#ID_MAISON #NOM_MAISON
<br/>
#ID_CHAMBRE #NOM_CHAMBRE
<br/>
</BOUCLE_maison>

Mais essaie de mettre un "s" à maison_chambre... La jointure se
ferait mieux non? (théorie)

Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com
<mailto:etienne.canuel@gmail.com>> a écrit :

J'ai essayé en enlevant spip_ devant mes noms de tables dans
'tables_jointures' mais rien n'y fait.

Voici la requete sql que spip me produit en passant par
var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM `spip`.spip_maisons
AS `maisons`

et il dit en clignotant le coquin :
Unknown column 'maisons.id_chambre' in 'field list'

ce que je me doutait bien vue que je veux faire une jointure et
que j'ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever "spip_" devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org
<mailto:jluc@no-log.org>
<mailto:jluc@no-log.org>> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j'ai les colonnes identiques mais en
bouclant sur
MAISONS,
je n'arrive pas à obtenir les champs de CHAMBRES tel que
#NOM_CHAMBRE

La seule solution que j'ai trouvée c'est d'utiliser
$exceptions_des_tables.

Oui ben ç'a l'air compliqué et je ne peux pas t'aider du
tout.

Si tu trouvais comment faire, ce serait super de
compléter les pages
que tu as indiqué pour que ça soit plus facile pour les
suivants...

Bon courage !
JLuc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> <mailto:spip@rezo.net
<mailto:spip@rezo.net>> - désabonnement : envoyer un
mail à spip-off@rezo.net <mailto:spip-off@rezo.net>
<mailto:spip-off@rezo.net>

Infos et archives :
http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer
un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

En lisant l'article sur programmer.spip.org, est-ce que tu peux tester ça stp (avec ce que tu as déjà me semble-t-il) ?

$interface['exceptions_des_tables']['maisons']['id_chambre'] = array('spip_chambres', 'id_chambre');
$interface['exceptions_des_tables']['maisons']['nom_chambre'] = array('spip_chambres', 'nom_chambre');

Le 10 févr. 10 à 20:39, Etienne Canuel a écrit :

Est ce que les tables de jointures permettent de faire ça ?

TABLE1 #CHAMP10 #CHAMP11

TABLE2 #CHAMP20 #CHAMP21

$interface['tables_jointures']['spip_TABLE1']= 'TABLE2';

$interface['tables_jointures']['spip_TABLE2']= 'TABLE1';

<BOUCLE_test(TABLE1){tout}>
#CHAMP10
#CHAMP11
#CHAMP20
#CHAMP21
</BOUCLE_test>

En bouclant sur TABLE1, on récupèrent les champs des deux tables TABLE1 et TABLE2 parce qu'on a déclaré la jointure.

Et si les tables de jointures ne servent pas à ça, dans quels cas sont elles utilisées ?

Etienne

Le 2010-02-10 20:05, Bernard Blazin a écrit :

Il faut laisser le préfixe spip_ .
Vu dans la doc:

$interface['tables_jointures']['spip_nom'] = 'autre_table';
$interface['tables_jointures']['spip_nom']['colonne'] = 'autre_table';
// exemples
// {id_mot} sur ARTICLES
$interface['tables_jointures']['spip_articles']= 'mots_articles';
$interface['tables_jointures']['spip_articles']= 'mots';
// jointures evenements (plugin agenda) sur les mots ou articles
$interface['tables_jointures']['spip_evenements']= 'mots'; // a placer
avant la jointure sur articles
$interface['tables_jointures']['spip_evenements'] = 'articles';
$interface['tables_jointures']['spip_evenements'] = 'mots_evenements';
// jointures articles vers evenements
$interface['tables_jointures']['spip_articles'] = 'evenements';

Bernard

Etienne Canuel a écrit :

Je viens d'essayer en mettant un s à ma table de jointure mais rien
n'y fait.

Si j'ecris ma boucle de la façon que tu me propose, je n'ai aucun
intérêt à créer une table de jointure, autant insérer directement un
champ id_maison dans la table Chambres

Je pensais qu'en référençant mes tables dans table_jointures je
n'aurais pas à faire ce genre de manip.

C'est pour ça que je ne comprend pas à quoi sert la table des
jointures si SPIP ne l'utilise pas automatiquement.

Le 2010-02-10 18:38, Teddy Payet a écrit :

Euh... pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la
maison...

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com
<mailto:teddy.spip@gmail.com>> a écrit :

Il ne faudrait pas faire qqch comme ça :
<BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

#ID_MAISON #NOM_MAISON
<br/>
#ID_CHAMBRE #NOM_CHAMBRE
<br/>
</BOUCLE_maison>

Mais essaie de mettre un "s" à maison_chambre... La jointure se
ferait mieux non? (théorie)

Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com
<mailto:etienne.canuel@gmail.com>> a écrit :

J'ai essayé en enlevant spip_ devant mes noms de tables dans
'tables_jointures' mais rien n'y fait.

Voici la requete sql que spip me produit en passant par
var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM `spip`.spip_maisons
AS `maisons`

et il dit en clignotant le coquin :
Unknown column 'maisons.id_chambre' in 'field list'

ce que je me doutait bien vue que je veux faire une jointure et
que j'ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever "spip_" devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org
<mailto:jluc@no-log.org>
<mailto:jluc@no-log.org>> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j'ai les colonnes identiques mais en
bouclant sur
MAISONS,
je n'arrive pas à obtenir les champs de CHAMBRES tel que
#NOM_CHAMBRE

La seule solution que j'ai trouvée c'est d'utiliser
$exceptions_des_tables.

Oui ben ç'a l'air compliqué et je ne peux pas t'aider du
tout.

Si tu trouvais comment faire, ce serait super de
compléter les pages
que tu as indiqué pour que ça soit plus facile pour les
suivants...

Bon courage !
JLuc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> <mailto:spip@rezo.net
<mailto:spip@rezo.net>> - désabonnement : envoyer un
mail à spip-off@rezo.net <mailto:spip-off@rezo.net>
<mailto:spip-off@rezo.net>

Infos et archives :
http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer
un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

J'ai déjà essayé avec les exceptions_des_tables et ca fonctionne.
Cette méthode est intéressante quand il n'y a que quelques champs.
Si je rajoute des champs il me faudra modifier le fichier d'installation.

En discutant sur IRC, on m'a dit que c'était possible de réaliser les jointures comme je le souhaitais. En faisant le lien par tables_jointures.
Mais pourquoi ca ne marche pas pour moi, bonne question.

Le 2010-02-10 21:51, Teddy Payet a écrit :

En lisant l'article sur programmer.spip.org, est-ce que tu peux tester
ça stp (avec ce que tu as déjà me semble-t-il) ?

$interface['exceptions_des_tables']['maisons']['id_chambre'] =
array('spip_chambres', 'id_chambre');
$interface['exceptions_des_tables']['maisons']['nom_chambre'] =
array('spip_chambres', 'nom_chambre');

Le 10 févr. 10 à 20:39, Etienne Canuel a écrit :

Est ce que les tables de jointures permettent de faire ça ?

TABLE1 #CHAMP10 #CHAMP11

TABLE2 #CHAMP20 #CHAMP21

$interface['tables_jointures']['spip_TABLE1']= 'TABLE2';

$interface['tables_jointures']['spip_TABLE2']= 'TABLE1';

<BOUCLE_test(TABLE1){tout}>
#CHAMP10
#CHAMP11
#CHAMP20
#CHAMP21
</BOUCLE_test>

En bouclant sur TABLE1, on récupèrent les champs des deux tables
TABLE1 et TABLE2 parce qu'on a déclaré la jointure.

Et si les tables de jointures ne servent pas à ça, dans quels cas sont
elles utilisées ?

Etienne

Le 2010-02-10 20:05, Bernard Blazin a écrit :

Il faut laisser le préfixe spip_ .
Vu dans la doc:

$interface['tables_jointures']['spip_nom'] = 'autre_table';
$interface['tables_jointures']['spip_nom']['colonne'] = 'autre_table';
// exemples
// {id_mot} sur ARTICLES
$interface['tables_jointures']['spip_articles']= 'mots_articles';
$interface['tables_jointures']['spip_articles']= 'mots';
// jointures evenements (plugin agenda) sur les mots ou articles
$interface['tables_jointures']['spip_evenements']= 'mots'; // a placer
avant la jointure sur articles
$interface['tables_jointures']['spip_evenements'] = 'articles';
$interface['tables_jointures']['spip_evenements'] = 'mots_evenements';
// jointures articles vers evenements
$interface['tables_jointures']['spip_articles'] = 'evenements';

Bernard

Etienne Canuel a écrit :

Je viens d'essayer en mettant un s à ma table de jointure mais rien
n'y fait.

Si j'ecris ma boucle de la façon que tu me propose, je n'ai aucun
intérêt à créer une table de jointure, autant insérer directement un
champ id_maison dans la table Chambres

Je pensais qu'en référençant mes tables dans table_jointures je
n'aurais pas à faire ce genre de manip.

C'est pour ça que je ne comprend pas à quoi sert la table des
jointures si SPIP ne l'utilise pas automatiquement.

Le 2010-02-10 18:38, Teddy Payet a écrit :

Euh... pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la
maison...

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com
<mailto:teddy.spip@gmail.com>> a écrit :

Il ne faudrait pas faire qqch comme ça :
<BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

#ID_MAISON #NOM_MAISON
<br/>
#ID_CHAMBRE #NOM_CHAMBRE
<br/>
</BOUCLE_maison>

Mais essaie de mettre un "s" à maison_chambre... La jointure se
ferait mieux non? (théorie)

Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com
<mailto:etienne.canuel@gmail.com>> a écrit :

J'ai essayé en enlevant spip_ devant mes noms de tables dans
'tables_jointures' mais rien n'y fait.

Voici la requete sql que spip me produit en passant par
var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM `spip`.spip_maisons
AS `maisons`

et il dit en clignotant le coquin :
Unknown column 'maisons.id_chambre' in 'field list'

ce que je me doutait bien vue que je veux faire une jointure et
que j'ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever "spip_" devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org
<mailto:jluc@no-log.org>
<mailto:jluc@no-log.org>> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j'ai les colonnes identiques mais en
bouclant sur
MAISONS,
je n'arrive pas à obtenir les champs de CHAMBRES tel que
#NOM_CHAMBRE

La seule solution que j'ai trouvée c'est d'utiliser
$exceptions_des_tables.

Oui ben ç'a l'air compliqué et je ne peux pas t'aider du
tout.

Si tu trouvais comment faire, ce serait super de
compléter les pages
que tu as indiqué pour que ça soit plus facile pour les
suivants...

Bon courage !
JLuc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> <mailto:spip@rezo.net
<mailto:spip@rezo.net>> - désabonnement : envoyer un
mail à spip-off@rezo.net <mailto:spip-off@rezo.net>
<mailto:spip-off@rezo.net>

Infos et archives :
http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer
un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Un résumé des tests que j'ai fait sur les jointures :

spip_tableas #id_a #champ_a
spip_tablebs #id_b #champ_b
spip_tableauxs #id_a #id_b

Dans le pipeline declarer_tables_interfaces :
$interface['tables_jointures']['spip_tableas'] = 'tableauxs';
$interface['tables_jointures']['spip_tablebs'] = 'tableauxs';
$interface['table_des_tables']['tableas']='tableas';
$interface['table_des_tables']['tablebs']='tablebs';

Dans mon squelette :
<BOUCLE_test(TABLEAS){tout}>
#ID_A #CHAMP_A #ID_B #CHAMP_B
</BOUCLE_test>

Rien ne s'affiche et en mode debug j'ai ça :
Unknown column 'tableas.id_b' in 'field list'

Conclusion, il ne fait pas la jointure. A quoi sert la déclaration des tables de jointure dans tables_jointures, mystère !!!!

Pour résoudre mon problème, j'ai trouvé plusieurs solution :
-------------------
Solution 1
----------
spip_tableas #id_a #id_b #champ_a
spip_tablebs #id_b #id_a #champ_b

Dans le pipeline declarer_tables_interfaces :
$interface['table_des_tables']['tableas']='tableas';
$interface['table_des_tables']['tablebs']='tablebs';

Dans mon squelette, en respectant les minuscules :
<BOUCLE_test(TABLEAS tablebs){tout}>
#ID_A #CHAMP_A #ID_B #CHAMP_B
</BOUCLE_test>

L'inconvénient c'est qu'il faut déclarer les deux tables dans la boucle
-------------------
Solution 2
----------
spip_tableas #id_a #id_b #champ_a
spip_tablebs #id_b #id_a #champ_b

Dans le pipeline declarer_tables_interfaces :
$interface['table_des_tables']['tableas']='tableas';
$interface['table_des_tables']['tablebs']='tablebs';

$interface['exceptions_des_tables']['tableas']['id_b'] = array('spip_table_bs', 'id_b');
$interface['exceptions_des_tables']['tableas']['champ_b'] = array('spip_table_bs', 'champ_b');

Dans mon squelette :
<BOUCLE_test(TABLEAS){tout}>
#ID_A #CHAMP_A #ID_B #CHAMP_B
</BOUCLE_test>

Cette solution permet de nommer une seule table mais il faut rajouter autant d'exeptions_de_tables qu'il y a de champs dans tablebs.

Les deux solutions fonctionnent mais je n'ai pas eu besoin de table_des_jointures. A quoi sert table_des_jointures

Le 2010-02-10 22:12, Etienne Canuel a écrit :

J'ai déjà essayé avec les exceptions_des_tables et ca fonctionne.
Cette méthode est intéressante quand il n'y a que quelques champs.
Si je rajoute des champs il me faudra modifier le fichier d'installation.

En discutant sur IRC, on m'a dit que c'était possible de réaliser les
jointures comme je le souhaitais. En faisant le lien par tables_jointures.
Mais pourquoi ca ne marche pas pour moi, bonne question.

Le 2010-02-10 21:51, Teddy Payet a écrit :

En lisant l'article sur programmer.spip.org, est-ce que tu peux tester
ça stp (avec ce que tu as déjà me semble-t-il) ?

$interface['exceptions_des_tables']['maisons']['id_chambre'] =
array('spip_chambres', 'id_chambre');
$interface['exceptions_des_tables']['maisons']['nom_chambre'] =
array('spip_chambres', 'nom_chambre');

Le 10 févr. 10 à 20:39, Etienne Canuel a écrit :

Est ce que les tables de jointures permettent de faire ça ?

TABLE1 #CHAMP10 #CHAMP11

TABLE2 #CHAMP20 #CHAMP21

$interface['tables_jointures']['spip_TABLE1']= 'TABLE2';

$interface['tables_jointures']['spip_TABLE2']= 'TABLE1';

<BOUCLE_test(TABLE1){tout}>
#CHAMP10
#CHAMP11
#CHAMP20
#CHAMP21
</BOUCLE_test>

En bouclant sur TABLE1, on récupèrent les champs des deux tables
TABLE1 et TABLE2 parce qu'on a déclaré la jointure.

Et si les tables de jointures ne servent pas à ça, dans quels cas sont
elles utilisées ?

Etienne

Le 2010-02-10 20:05, Bernard Blazin a écrit :

Il faut laisser le préfixe spip_ .
Vu dans la doc:

$interface['tables_jointures']['spip_nom'] = 'autre_table';
$interface['tables_jointures']['spip_nom']['colonne'] = 'autre_table';
// exemples
// {id_mot} sur ARTICLES
$interface['tables_jointures']['spip_articles']= 'mots_articles';
$interface['tables_jointures']['spip_articles']= 'mots';
// jointures evenements (plugin agenda) sur les mots ou articles
$interface['tables_jointures']['spip_evenements']= 'mots'; // a
placer
avant la jointure sur articles
$interface['tables_jointures']['spip_evenements'] = 'articles';
$interface['tables_jointures']['spip_evenements'] =
'mots_evenements';
// jointures articles vers evenements
$interface['tables_jointures']['spip_articles'] = 'evenements';

Bernard

Etienne Canuel a écrit :

Je viens d'essayer en mettant un s à ma table de jointure mais rien
n'y fait.

Si j'ecris ma boucle de la façon que tu me propose, je n'ai aucun
intérêt à créer une table de jointure, autant insérer directement un
champ id_maison dans la table Chambres

Je pensais qu'en référençant mes tables dans table_jointures je
n'aurais pas à faire ce genre de manip.

C'est pour ça que je ne comprend pas à quoi sert la table des
jointures si SPIP ne l'utilise pas automatiquement.

Le 2010-02-10 18:38, Teddy Payet a écrit :

Euh... pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en
critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la
maison...

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com
<mailto:teddy.spip@gmail.com>> a écrit :

Il ne faudrait pas faire qqch comme ça :
<BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

#ID_MAISON #NOM_MAISON
<br/>
#ID_CHAMBRE #NOM_CHAMBRE
<br/>
</BOUCLE_maison>

Mais essaie de mettre un "s" à maison_chambre... La jointure se
ferait mieux non? (théorie)

Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com
<mailto:etienne.canuel@gmail.com>> a écrit :

J'ai essayé en enlevant spip_ devant mes noms de tables dans
'tables_jointures' mais rien n'y fait.

Voici la requete sql que spip me produit en passant par
var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM `spip`.spip_maisons
AS `maisons`

et il dit en clignotant le coquin :
Unknown column 'maisons.id_chambre' in 'field list'

ce que je me doutait bien vue que je veux faire une jointure et
que j'ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever "spip_" devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org
<mailto:jluc@no-log.org>
<mailto:jluc@no-log.org>> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j'ai les colonnes identiques mais en
bouclant sur
MAISONS,
je n'arrive pas à obtenir les champs de CHAMBRES tel que
#NOM_CHAMBRE

La seule solution que j'ai trouvée c'est d'utiliser
$exceptions_des_tables.

Oui ben ç'a l'air compliqué et je ne peux pas t'aider du
tout.

Si tu trouvais comment faire, ce serait super de
compléter les pages
que tu as indiqué pour que ça soit plus facile pour les
suivants...

Bon courage !
JLuc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> <mailto:spip@rezo.net
<mailto:spip@rezo.net>> - désabonnement : envoyer un
mail à spip-off@rezo.net <mailto:spip-off@rezo.net>
<mailto:spip-off@rezo.net>

Infos et archives :
http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer
un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Le 11/02/2010 12:42, Etienne Canuel a écrit :

Un résumé des tests que j'ai fait sur les jointures :

spip_tableas #id_a #champ_a
spip_tablebs #id_b #champ_b
spip_tableauxs #id_a #id_b

Dans le pipeline declarer_tables_interfaces :
$interface['tables_jointures']['spip_tableas'] = 'tableauxs';
$interface['tables_jointures']['spip_tablebs'] = 'tableauxs';
$interface['table_des_tables']['tableas']='tableas';
$interface['table_des_tables']['tablebs']='tablebs';

hello,
je ne déclare jamais mes jointures, préférant les expliciter...
pour éviter ces galères de mises au point, mais ...

Dans mon squelette :
<BOUCLE_test(TABLEAS){tout}>
#ID_A #CHAMP_A #ID_B #CHAMP_B
</BOUCLE_test>

Rien ne s'affiche et en mode debug j'ai ça :
Unknown column 'tableas.id_b' in 'field list'

ça ne m'étonne pas tellement,
car il n'y a pas de jointure entre A et B,
mais entre X et A d'une part et X et B d'autre part.

<BOUCLE_test(TABLEAUX){tout}>
#ID_A #CHAMP_A #ID_B #CHAMP_B
</BOUCLE_test>

est alors un meilleur départ pour tester !

JLuc

Pour résoudre mon problème, j'ai trouvé plusieurs solution :
-------------------
Solution 1
----------
spip_tableas #id_a #id_b #champ_a
spip_tablebs #id_b #id_a #champ_b

Dans le pipeline declarer_tables_interfaces :
$interface['table_des_tables']['tableas']='tableas';
$interface['table_des_tables']['tablebs']='tablebs';

Dans mon squelette, en respectant les minuscules :
<BOUCLE_test(TABLEAS tablebs){tout}>
#ID_A #CHAMP_A #ID_B #CHAMP_B
</BOUCLE_test>

L'inconvénient c'est qu'il faut déclarer les deux tables dans la boucle
-------------------
Solution 2
----------
spip_tableas #id_a #id_b #champ_a
spip_tablebs #id_b #id_a #champ_b

Dans le pipeline declarer_tables_interfaces :
$interface['table_des_tables']['tableas']='tableas';
$interface['table_des_tables']['tablebs']='tablebs';

$interface['exceptions_des_tables']['tableas']['id_b'] =
array('spip_table_bs', 'id_b');
$interface['exceptions_des_tables']['tableas']['champ_b'] =
array('spip_table_bs', 'champ_b');

Dans mon squelette :
<BOUCLE_test(TABLEAS){tout}>
#ID_A #CHAMP_A #ID_B #CHAMP_B
</BOUCLE_test>

Cette solution permet de nommer une seule table mais il faut rajouter
autant d'exeptions_de_tables qu'il y a de champs dans tablebs.

Les deux solutions fonctionnent mais je n'ai pas eu besoin de
table_des_jointures. A quoi sert table_des_jointures

Le 2010-02-10 22:12, Etienne Canuel a écrit :

J'ai déjà essayé avec les exceptions_des_tables et ca fonctionne.
Cette méthode est intéressante quand il n'y a que quelques champs.
Si je rajoute des champs il me faudra modifier le fichier d'installation.

En discutant sur IRC, on m'a dit que c'était possible de réaliser les
jointures comme je le souhaitais. En faisant le lien par
tables_jointures.
Mais pourquoi ca ne marche pas pour moi, bonne question.

Le 2010-02-10 21:51, Teddy Payet a écrit :

En lisant l'article sur programmer.spip.org, est-ce que tu peux tester
ça stp (avec ce que tu as déjà me semble-t-il) ?

$interface['exceptions_des_tables']['maisons']['id_chambre'] =
array('spip_chambres', 'id_chambre');
$interface['exceptions_des_tables']['maisons']['nom_chambre'] =
array('spip_chambres', 'nom_chambre');

Le 10 févr. 10 à 20:39, Etienne Canuel a écrit :

Est ce que les tables de jointures permettent de faire ça ?

TABLE1 #CHAMP10 #CHAMP11

TABLE2 #CHAMP20 #CHAMP21

$interface['tables_jointures']['spip_TABLE1']= 'TABLE2';

$interface['tables_jointures']['spip_TABLE2']= 'TABLE1';

<BOUCLE_test(TABLE1){tout}>
#CHAMP10
#CHAMP11
#CHAMP20
#CHAMP21
</BOUCLE_test>

En bouclant sur TABLE1, on récupèrent les champs des deux tables
TABLE1 et TABLE2 parce qu'on a déclaré la jointure.

Et si les tables de jointures ne servent pas à ça, dans quels cas sont
elles utilisées ?

Etienne

Le 2010-02-10 20:05, Bernard Blazin a écrit :

Il faut laisser le préfixe spip_ .
Vu dans la doc:

$interface['tables_jointures']['spip_nom'] = 'autre_table';
$interface['tables_jointures']['spip_nom']['colonne'] = 'autre_table';
// exemples
// {id_mot} sur ARTICLES
$interface['tables_jointures']['spip_articles']= 'mots_articles';
$interface['tables_jointures']['spip_articles']= 'mots';
// jointures evenements (plugin agenda) sur les mots ou articles
$interface['tables_jointures']['spip_evenements']= 'mots'; // a
placer
avant la jointure sur articles
$interface['tables_jointures']['spip_evenements'] = 'articles';
$interface['tables_jointures']['spip_evenements'] =
'mots_evenements';
// jointures articles vers evenements
$interface['tables_jointures']['spip_articles'] = 'evenements';

Bernard

Etienne Canuel a écrit :

Je viens d'essayer en mettant un s à ma table de jointure mais rien
n'y fait.

Si j'ecris ma boucle de la façon que tu me propose, je n'ai aucun
intérêt à créer une table de jointure, autant insérer directement un
champ id_maison dans la table Chambres

Je pensais qu'en référençant mes tables dans table_jointures je
n'aurais pas à faire ce genre de manip.

C'est pour ça que je ne comprend pas à quoi sert la table des
jointures si SPIP ne l'utilise pas automatiquement.

Le 2010-02-10 18:38, Teddy Payet a écrit :

Euh... pardon pour le doublon :

Pourquoi ne mets-tu pas une boucle CHAMBRES avec id_maison en
critère?
Ça te donnerait la possibilité de lister toutes les chambres sous la
maison...

Le 10 février 2010 18:37, Teddy Payet <teddy.spip@gmail.com
<mailto:teddy.spip@gmail.com>> a écrit :

Il ne faudrait pas faire qqch comme ça :
<BOUCLE_maison(MAISONS maison_chambre chambres){tout}>

#ID_MAISON #NOM_MAISON
<br/>
#ID_CHAMBRE #NOM_CHAMBRE
<br/>
</BOUCLE_maison>

Mais essaie de mettre un "s" à maison_chambre... La jointure se
ferait mieux non? (théorie)

Le 10 février 2010 18:06, Etienne Canuel <etienne.canuel@gmail.com
<mailto:etienne.canuel@gmail.com>> a écrit :

J'ai essayé en enlevant spip_ devant mes noms de tables dans
'tables_jointures' mais rien n'y fait.

Voici la requete sql que spip me produit en passant par
var_profile=1 :

SELECT maisons.id_maison, maisons.nom_maison, maisons.id_chambre
FROM `spip`.spip_maisons
AS `maisons`

et il dit en clignotant le coquin :
Unknown column 'maisons.id_chambre' in 'field list'

ce que je me doutait bien vue que je veux faire une jointure et
que j'ai les ai déclarées dans la table.

Je ne comprend pas bien le fonctionnement.

Merci pour votre attention.

Le 2010-02-10 17:44, Teddy Payet a écrit :

Bonjour,

Il faut enlever "spip_" devant le nom de tes tables.
cf. : http://programmer.spip.org/declarer_tables_interfaces,379

Le 10 février 2010 17:31, JLuc <jluc@no-log.org
<mailto:jluc@no-log.org>
<mailto:jluc@no-log.org>> a écrit :

Le 10/02/2010 15:53, Etienne Canuel a écrit :

Dans mon cas, j'ai les colonnes identiques mais en
bouclant sur
MAISONS,
je n'arrive pas à obtenir les champs de CHAMBRES tel que
#NOM_CHAMBRE

La seule solution que j'ai trouvée c'est d'utiliser
$exceptions_des_tables.

Oui ben ç'a l'air compliqué et je ne peux pas t'aider du
tout.

Si tu trouvais comment faire, ce serait super de
compléter les pages
que tu as indiqué pour que ça soit plus facile pour les
suivants...

Bon courage !
JLuc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> <mailto:spip@rezo.net
<mailto:spip@rezo.net>> - désabonnement : envoyer un
mail à spip-off@rezo.net <mailto:spip-off@rezo.net>
<mailto:spip-off@rezo.net>

Infos et archives :
http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net <mailto:spip@rezo.net> - désabonnement : envoyer
un mail à spip-off@rezo.net <mailto:spip-off@rezo.net>

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc