Jointure de deux tables

Bonjour,

au lieu d'utiliser deux boucles (classique...)

Je tente en une seule boucle (compliqué pour moi) d'établir une jointure entre la table DOCUMENTS et la table ARTICLES de manière à obtenir :
de la table DOCUMENTS : une image d'un article (filtrée par l'id de l'article et le descriptif de l'image)
et de la table ARTICLES : l'url, le titre et le descriptif de l'article.

J'obtiens bien l'image avec #FICHIER, normal
mais l'url est 0; le titre et le descriptif sont ceux de l'image.

Est-ce possible en une boucle avec jointure de deux tables d'obtenir le résultat ?

Voici la tentative qui n'est pas au point :
    <BOUCLE_image(DOCUMENTS){articles.id_article=50}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE
#DESCRIPTIF
</BOUCLE_image>

Merci, merci,
A+
Alain

peut etre plutot :

<BOUCLE_image(DOCUMENTS articles){id_article=50}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE
#DESCRIPTIF
</BOUCLE_image>

il me semble que j'ai un truc plus ou moins similaire qqpart. Si cet
exemple ne fonctionne pas, dis le moi, je regarderai plus en details.

Chag

Alain HUSSON a écrit :

Bonjour,

au lieu d'utiliser deux boucles (classique...)

Je tente en une seule boucle (compliqué pour moi) d'établir une jointure
entre la table DOCUMENTS et la table ARTICLES de manière à obtenir :
de la table DOCUMENTS : une image d'un article (filtrée par l'id de
l'article et le descriptif de l'image)
et de la table ARTICLES : l'url, le titre et le descriptif de l'article.

J'obtiens bien l'image avec #FICHIER, normal
mais l'url est 0; le titre et le descriptif sont ceux de l'image.

Est-ce possible en une boucle avec jointure de deux tables d'obtenir le
résultat ?

Voici la tentative qui n'est pas au point :
       
<BOUCLE_image(DOCUMENTS){articles.id_article=50}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE
#DESCRIPTIF
</BOUCLE_image>

Merci, merci,
A+
Alain

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

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

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

irc://irc.freenode.net/spip ou
http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

--
"Ca ne marche pas" ne veut rien dire. Alors ne dites rien (ou développez !)
"it doesn't work" means nothing. So, say nothing (or say more !)

Je n'ai pas dû poser la bonne question :

Dans la boucle :
<BOUCLE_image(DOCUMENTS){mode=image}{id_article}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE

</BOUCLE_image>

du fait de la jointure automatique des tables effectuées pas SPIP
l'URL de l'article correspondant à l'image de l'id_article est juste.
Par contre, ce n'est pas le TITRE de l'image que je voudrais
mais le titre de l'article.
Le pb est que TITRE est commun au document et à l'article.
En sql j'écrirai table.champ, mais articles.#TITRE ne fonctionne pas.

Si quelqu'un a une solution, sans passer par deux boucles...
Merci
Alain

chag a écrit :

peut etre plutot :

<BOUCLE_image(DOCUMENTS articles){id_article=50}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE
#DESCRIPTIF
</BOUCLE_image>

il me semble que j'ai un truc plus ou moins similaire qqpart. Si cet
exemple ne fonctionne pas, dis le moi, je regarderai plus en details.

Chag

Alain HUSSON a écrit :

Bonjour,

au lieu d'utiliser deux boucles (classique...)

Je tente en une seule boucle (compliqué pour moi) d'établir une jointure
entre la table DOCUMENTS et la table ARTICLES de manière à obtenir :
de la table DOCUMENTS : une image d'un article (filtrée par l'id de
l'article et le descriptif de l'image)
et de la table ARTICLES : l'url, le titre et le descriptif de l'article.

J'obtiens bien l'image avec #FICHIER, normal
mais l'url est 0; le titre et le descriptif sont ceux de l'image.

Est-ce possible en une boucle avec jointure de deux tables d'obtenir le
résultat ?

Voici la tentative qui n'est pas au point :
       <BOUCLE_image(DOCUMENTS){articles.id_article=50}{descriptif=selection}> <a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a> #TITRE
#DESCRIPTIF
</BOUCLE_image>

Merci, merci,
A+
Alain

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

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

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

irc://irc.freenode.net/spip ou
http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

Alain HUSSON a écrit :

Je n'ai pas dû poser la bonne question :

Dans la boucle :
<BOUCLE_image(DOCUMENTS){mode=image}{id_article}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE

</BOUCLE_image>

du fait de la jointure automatique des tables effectuées pas SPIP
l'URL de l'article correspondant à l'image de l'id_article est juste.
Par contre, ce n'est pas le TITRE de l'image que je voudrais
mais le titre de l'article.
Le pb est que TITRE est commun au document et à l'article.
En sql j'écrirai table.champ, mais articles.#TITRE ne fonctionne pas.

Si quelqu'un a une solution, sans passer par deux boucles...

j'imagine que ta boucle est dans une boucle article.
dans ce cas, tu peux faire :
<BOUCLE_toto(ARTICLES){id_article}>

...

<BOUCLE_image(DOCUMENTS){mode=image}{id_article}{descriptif=selection}>
<a href="#_toto:URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
  #_toto:TITRE
</BOUCLE_image>

...

</BOUCLE_toto>

@++

Merci Stéphane, mais j'ai bien dit : sans passer par deux boucles
ce que des jointures en sql peuvent faire
en déclarant le nom de table et celui du champ
du genre table.champ

mais ce n'est peut-être pas possible avec spip, ce qui m'étonnerai car il y a tellement de possibilités.

Si quelqu'un sait faire ...
merci
A+
alain

Stephane a écrit :

Alain HUSSON a écrit :

Je n'ai pas dû poser la bonne question :

Dans la boucle :
<BOUCLE_image(DOCUMENTS){mode=image}{id_article}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE

</BOUCLE_image>

du fait de la jointure automatique des tables effectuées pas SPIP
l'URL de l'article correspondant à l'image de l'id_article est juste.
Par contre, ce n'est pas le TITRE de l'image que je voudrais
mais le titre de l'article.
Le pb est que TITRE est commun au document et à l'article.
En sql j'écrirai table.champ, mais articles.#TITRE ne fonctionne pas.

Si quelqu'un a une solution, sans passer par deux boucles...

j'imagine que ta boucle est dans une boucle article.
dans ce cas, tu peux faire :
<BOUCLE_toto(ARTICLES){id_article}>

...

<BOUCLE_image(DOCUMENTS){mode=image}{id_article}{descriptif=selection}>
<a href="#_toto:URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#_toto:TITRE
</BOUCLE_image>

...

</BOUCLE_toto>

@++

Merci Stephane, mais dans l'exemple que je donne, il n'y a qu'une seule boucle et pas deux.

Dans une requête sql, on peut indiquer pour chaque table un nom de champ
lorsqu'il y a plusieurs champs identiques appartenant à plusieurs tables
du genre table.champ
Ce soit aussi être possible avec spip

Alors si quelqu'un a la solution savante...
merci
A+
Alain

Stephane a écrit :

Alain HUSSON a écrit :

Je n'ai pas dû poser la bonne question :

Dans la boucle :
<BOUCLE_image(DOCUMENTS){mode=image}{id_article}{descriptif=selection}>
<a href="#URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#TITRE

</BOUCLE_image>

du fait de la jointure automatique des tables effectuées pas SPIP
l'URL de l'article correspondant à l'image de l'id_article est juste.
Par contre, ce n'est pas le TITRE de l'image que je voudrais
mais le titre de l'article.
Le pb est que TITRE est commun au document et à l'article.
En sql j'écrirai table.champ, mais articles.#TITRE ne fonctionne pas.

Si quelqu'un a une solution, sans passer par deux boucles...

j'imagine que ta boucle est dans une boucle article.
dans ce cas, tu peux faire :
<BOUCLE_toto(ARTICLES){id_article}>

...

<BOUCLE_image(DOCUMENTS){mode=image}{id_article}{descriptif=selection}>
<a href="#_toto:URL_ARTICLE">[(#FICHIER|image_reduire{260,0})]</a>
#_toto:TITRE
</BOUCLE_image>

...

</BOUCLE_toto>

@++

* Alain HUSSON tapuscrivait, le 09/03/2009 17:03:

Merci Stéphane, mais j'ai bien dit : sans passer par deux boucles
ce que des jointures en sql peuvent faire
en déclarant le nom de table et celui du champ
du genre table.champ

mais ce n'est peut-être pas possible avec spip, ce qui m'étonnerai car il y a tellement de possibilités.

Malheureusement, en l'état de SPIP, ce n'est pas possible.
La notion d'alias n'existe pas
Et #table.CHAMP non plus :frowning:

--
RealET

Tant pis, SPIP fait tellement de choses
il est pardonné...
C'était histoire d'économiser une boucle pour aller plus vite.
On conservera donc plusieurs boucles.
Merci beaucoup pour la réponse.
A+
Alain

RealET a écrit :

* Alain HUSSON tapuscrivait, le 09/03/2009 17:03:

Merci Stéphane, mais j'ai bien dit : sans passer par deux boucles
ce que des jointures en sql peuvent faire
en déclarant le nom de table et celui du champ
du genre table.champ

mais ce n'est peut-être pas possible avec spip, ce qui m'étonnerai car il y a tellement de possibilités.

Malheureusement, en l'état de SPIP, ce n'est pas possible.
La notion d'alias n'existe pas
Et #table.CHAMP non plus :frowning:

Alain HUSSON a écrit :

Merci Stephane, mais dans l'exemple que je donne, il n'y a qu'une seule boucle et pas deux.

Dans une requête sql, on peut indiquer pour chaque table un nom de champ
lorsqu'il y a plusieurs champs identiques appartenant à plusieurs tables
du genre table.champ
Ce soit aussi être possible avec spip

le probleme, c'est pas tant la jointure, qu'il serait effectivement facile de faire, c'est plutot la présence de champs homonymes (titre) dans les 2 tables

Maintenant, je ne suis pas sur de mon coup, mais il est probable que #URL_ARTICLE hors d'une boucle ARTICLES provoque de toute facon la requete sur la table spip_article (au rechargement du cache uniquement bien sur)
donc niveau perf, mettre la boucle article, meme à l'interieur de ta boucle document, ca n'est pas forcement une mauvaise idée et ne devrait pas changer grand chose en terme de perf.

Alors si quelqu'un a la solution savante...

une piste serait peut etre de déclarer justement une jointure automatique avec une exception de nommage, mais ca va modifier le comportement de toutes les boucles documents

autre approche, te faire un critère genre {titre article} qui ajoute la jointure et le champ "spip_articles.titre as titre_article"
c'est un peu de code compliqué, mais c'est sans doute le plus propre

heu, je dis tout ca, mais tu es bien en spip 1.9.2 hein ?

@++