jointure tables id_syndic_articles et articles

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents des contributions articles et syndic_articles confondues d'un site, avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
  <br />#TITRE
</BOUCLE_liste>

...si ce n'est que je n'arrive pas à exploiter les résultats : dans le corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
  
<BOUCLE1(ARTICLES){id_article}><INCLURE{fond=1}...></BOUCLE1> <BOUCLE2(SYNDIC_ARTICLES){id_syndic_article}><INCLURE{fond=2}...></BOUCLE2>

</BOUCLE_liste>

J'essaye d'éviter les tableaux, si quelqu'un a une idée.

Merci

Patrick
SPIP : 1.9.3dev - 11227

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents des contributions articles et syndic_articles confondues d'un site, avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <br />#TITRE
</BOUCLE_liste>

....si ce n'est que je n'arrive pas à exploiter les résultats : dans le corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>

et c'est quoi la jointure entre syndic et article ?
c'est pas plutot :
<BOUCLE_liste(SYNDIC_ARTICLE spip_syndic spip_rubriques)

Stephane a écrit :

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents des contributions articles et syndic_articles confondues d'un site, avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <br />#TITRE
</BOUCLE_liste>

....si ce n'est que je n'arrive pas à exploiter les résultats : dans le corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>

et c'est quoi la jointure entre syndic et article ?
c'est pas plutot :
<BOUCLE_liste(SYNDIC_ARTICLE spip_syndic spip_rubriques)

Le but c'est de récupérer ensemble les données d'articles et de syndic_articles.
Comme les critères portent sur date et la rubrique j'ai rajouté syndic qui fait la jointure sur la rubrique comme syndic_articles n'a pas ce champ, mais quelque chose m'échappe.

J'essaye ta proposition et te tiens au courant

Patrick

Patrick VINCENT a écrit :

Stephane a écrit :

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents des contributions articles et syndic_articles confondues d'un site, avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <br />#TITRE
</BOUCLE_liste>

....si ce n'est que je n'arrive pas à exploiter les résultats : dans le corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>

et c'est quoi la jointure entre syndic et article ?
c'est pas plutot :
<BOUCLE_liste(SYNDIC_ARTICLE spip_syndic spip_rubriques)

Le but c'est de récupérer ensemble les données d'articles et de syndic_articles.

Ah, OK, donc, non, ca pas etre possible.
une boucle ne peut ramener des element d'un seul type, on ne fait pas de UNION, que du select.
il faut donc récuperer d'un coté les articles et de l'autre les articles syndiqués.
Après tu peux remplir un tableau, le trier et le reparcourir avec un #FOREACH si tu veux mixer les deux types de données

Comme les critères portent sur date et la rubrique j'ai rajouté syndic qui fait la jointure sur la rubrique comme syndic_articles n'a pas ce champ, mais quelque chose m'échappe.

tu peux faire :
<BOUCLE_liste(SYNDIC_ARTICLES spip_syndic){id_rubrique}>
ou
<BOUCLE_liste(SYNDIC_ARTICLES spip_syndic){id_secteur}>
la table spip_syndic a les 2 champs.
ca te remontera les articles syndiqués des sites de la rubrique ou du secteur donné
Mais j'ai un doute sur {id_secteur}, je ne sais pas si c'est equivalent à {id_secteur=#ENV{id_secteur}} ou {id_secteur=#ENV{id_rubrique}}

et à coté tu fais un classique :
<BOUCLE_liste(ARTICLES){id_rubrique}>

Après il faut que tu lises la doc sur les #SET, les #ARRAY et que tu vois si tu utilise #FOREACH ou une feinte (boucle bidon pour avoir une itération et parcourir le tableau dans cette boucle)

@++

Malheureusement ça ne marche pas, il manque les articles.

Je pense qu'à la base une requête jointe sur les articles et les articles_syndic en fonction de leur date pose problème pour cause d'inexistence du champ id_syndic_article dans la table spip_articles et inversement pour la table spip_syndic_articles :

<BOUCLE_liste(SYNDIC_ARTICLES spip_articles){par date}{inverse}{0,10}>
  <br /><br />#TITRE
  <br />[(#DATE|affdate)]
  [article : (#ID_ARTICLE)]
  [syndic : (#ID_SYNDIC_ARTICLE)]
</BOUCLE_liste>

Quelqu'un aurait il déjà fait ça autrement ? Avec des #ARRAY ?

Patrick

Patrick VINCENT a écrit :

Stephane a écrit :

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents des contributions articles et syndic_articles confondues d'un site, avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <br />#TITRE
</BOUCLE_liste>

....si ce n'est que je n'arrive pas à exploiter les résultats : dans le corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>

et c'est quoi la jointure entre syndic et article ?
c'est pas plutot :
<BOUCLE_liste(SYNDIC_ARTICLE spip_syndic spip_rubriques)

Le but c'est de récupérer ensemble les données d'articles et de syndic_articles.
Comme les critères portent sur date et la rubrique j'ai rajouté syndic qui fait la jointure sur la rubrique comme syndic_articles n'a pas ce champ, mais quelque chose m'échappe.

J'essaye ta proposition et te tiens au courant

Patrick

Patrick VINCENT a écrit :

Malheureusement ça ne marche pas, il manque les articles.

hum, hum... relis ma reponse.
une jointure n'est pas une union, tu confonds 2 choses totalement differente.
Une boucle ARTICLES remonte des article une boucle SYNDIC_ARTICLES des articles syndiqués, tu ne peux pas faire une boucle qui remonte les 2.

@++

as-tu essayé avec les doublons ?
genre
<BOUCLE_liste(SYNDIC_ARTICLES){par date}{inverse}{0,10}{doublons A}>
</BOUCLE_liste>
<BOUCLE_la(ARTICLES){par date}{inverse}{0,10}{doublons A}>
</BOUCLE_la>
<BOUCLE_sortles(ARTICLES){par date}{inverse}{0,10}{!doublons A}>

  <br /><br />#TITRE
  <br />[(#DATE|affdate)]
  [article : (#ID_ARTICLE)]
  [syndic : (#ID_SYNDIC_ARTICLE)]

</BOUCLE_sortles>

Le 3 juil. 08 à 23:55, Patrick VINCENT a écrit :

Malheureusement ça ne marche pas, il manque les articles.

Je pense qu'à la base une requête jointe sur les articles et les articles_syndic en fonction de leur date pose problème pour cause d'inexistence du champ id_syndic_article dans la table spip_articles et inversement pour la table spip_syndic_articles :

<BOUCLE_liste(SYNDIC_ARTICLES spip_articles){par date}{inverse}{0,10}>
  <br /><br />#TITRE
  <br />[(#DATE|affdate)]
  [article : (#ID_ARTICLE)]
  [syndic : (#ID_SYNDIC_ARTICLE)]
</BOUCLE_liste>

Quelqu'un aurait il déjà fait ça autrement ? Avec des #ARRAY ?

Patrick

Patrick VINCENT a écrit :

Stephane a écrit :

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents des contributions articles et syndic_articles confondues d'un site, avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
   <br />#TITRE
</BOUCLE_liste>

....si ce n'est que je n'arrive pas à exploiter les résultats : dans le corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>

et c'est quoi la jointure entre syndic et article ?
c'est pas plutot :
<BOUCLE_liste(SYNDIC_ARTICLE spip_syndic spip_rubriques)

Le but c'est de récupérer ensemble les données d'articles et de syndic_articles.
Comme les critères portent sur date et la rubrique j'ai rajouté syndic qui fait la jointure sur la rubrique comme syndic_articles n'a pas ce champ, mais quelque chose m'échappe.
J'essaye ta proposition et te tiens au courant
Patrick

_______________________________________________
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

Tu dois y arriver avec les boucles sur des éléments hétérogènes :

Tu sélectionnes l'article le plus récent et tu affiches les syndic articles plus récent puis tu affiches l'article etc ...
La dernière boucle permet d'afficher les syndic article les plus vieux et est là au cas il n'y aurait pas du tou d'article.

L'inconvénient de ce type de boucle, c'est que la pagination est impossible.

++

<BOUCLE_art(ARTICLES){par date}{inverse}{id_secteur?}{id_rubrique?}>
<BOUCLE_synd_art(SYNDIC_ARTICLE){par date}{inverse}{id_secteur?}{id_rubrique?}(age_relatif<0}{doublons syndart}>
#_synd_art:TITRE
</BOUCLE_synd_art>
#_art:TITRE
</BOUCLE_art>
</B_art>
<BOUCLE_art2(ARTICLES){par date}{inverse}{id_secteur?}{id_rubrique?}{doublons syndart}>
#_synd_art:TITRE
</BOUCLE_art2>
<//B_art>

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents des contributions articles et syndic_articles confondues d'un site, avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <br />#TITRE
</BOUCLE_liste>

...si ce n'est que je n'arrive pas à exploiter les résultats : dans le corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <BOUCLE1(ARTICLES){id_article}><INCLURE{fond=1}...></BOUCLE1> <BOUCLE2(SYNDIC_ARTICLES){id_syndic_article}><INCLURE{fond=2}...></BOUCLE2>

</BOUCLE_liste>

J'essaye d'éviter les tableaux, si quelqu'un a une idée.

Merci

Patrick
SPIP : 1.9.3dev - 11227

Je reprends tardivement ce code, merci pour vos réponses.

Il s'agissait effectivement d'une union et non d'une jointure :frowning:

Une solution qui fonctionne sur la base l'age relatif :

<BOUCLE_art(ARTICLES){par date}{inverse}{id_rubrique?}>
  <BOUCLE_synd_art(SYNDIC_ARTICLES){par
date}{inverse}{id_rubrique?}{age_relatif<0}{doublons syndart}>
    SYNDIC : #_synd_art:TITRE / #_synd_art:DATE<br />
  </BOUCLE_synd_art>
    ARTICLE : #_art:TITRE / #_art:DATE<br />
</BOUCLE_art>
  <BOUCLE_synd_art1(SYNDIC_ARTICLES){par
date}{inverse}{id_rubrique?}{doublons syndart}>
    SYNDIC : #_synd_art1:TITRE / #_synd_art1:DATE<br />
  </BOUCLE_synd_art1>
</B_art>
  <BOUCLE_synd_art2(SYNDIC_ARTICLES){par date}{inverse}{id_rubrique?}>
    #_synd_art2:TITRE
  </BOUCLE_synd_art2>
<//B_art>

Patrick

yoh a écrit :

Tu dois y arriver avec les boucles sur des éléments hétérogènes :

Tu sélectionnes l'article le plus récent et tu affiches les syndic
articles plus récent puis tu affiches l'article etc ...
La dernière boucle permet d'afficher les syndic article les plus vieux
et est là au cas il n'y aurait pas du tou d'article.

L'inconvénient de ce type de boucle, c'est que la pagination est
impossible.

++

<BOUCLE_art(ARTICLES){par date}{inverse}{id_secteur?}{id_rubrique?}>
<BOUCLE_synd_art(SYNDIC_ARTICLE){par
date}{inverse}{id_secteur?}{id_rubrique?}(age_relatif<0}{doublons syndart}>
#_synd_art:TITRE
</BOUCLE_synd_art>
#_art:TITRE
</BOUCLE_art>
</B_art>
<BOUCLE_art2(ARTICLES){par
date}{inverse}{id_secteur?}{id_rubrique?}{doublons syndart}>
#_synd_art:TITRE
</BOUCLE_art2>
<//B_art>

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents
des contributions articles et syndic_articles confondues d'un site,
avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par
date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <br />#TITRE
</BOUCLE_liste>

...si ce n'est que je n'arrive pas à exploiter les résultats : dans le
corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE
ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et
appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par
date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <BOUCLE1(ARTICLES){id_article}><INCLURE{fond=1}...></BOUCLE1>
<BOUCLE2(SYNDIC_ARTICLES){id_syndic_article}><INCLURE{fond=2}...></BOUCLE2>

</BOUCLE_liste>

J'essaye d'éviter les tableaux, si quelqu'un a une idée.

Merci

Patrick
SPIP : 1.9.3dev - 11227

Voici (tout aussi tardivement) une deuxième méthode que j'ai réussi à
faire fonctionner avec utilisation de tableaux tout SPIP qui est du coup
plus générique.
Il faut par contre installer SPIP Bonux, ce qui la rends dépendante d'un
plugin.

[(#REM)Boucle sur le contenu d'une rubrique et tri par date : articles,
sites, documents
Paramètres du squelette :
- id_rubrique]

[(#REM)-- Initialisation des variables --]
        #SET{iteration,10}
        #SET{contenus, #ARRAY}

[(#REM)-- Construction des listes de contenus --]
<BOUCLE_art(ARTICLES){id_rubrique}{0,#GET{iteration}}{!par date}>
#SET_MERGE{contenus,#GET{contenus},#ARRAY{#DATEart#ID_ARTICLE,#ARRAY{art,#ID_ARTICLE}}}
</BOUCLE_art>

<BOUCLE_syndic(SYNDIC_ARTICLES){id_rubrique}{0,#GET{iteration}}{!par date}>
#SET_MERGE{contenus,#GET{contenus},#ARRAY{#DATEsynd#ID_SYNDIC_ARTICLE,#ARRAY{synd,#ID_SYNDIC_ARTICLE}}}
</BOUCLE_syndic>

<BOUCLE_doc(DOCUMENTS){id_rubrique}{0,#GET{iteration}}{!par date}>
#SET_MERGE{contenus,#GET{contenus},#ARRAY{#DATEdoc#ID_DOCUMENT,#ARRAY{doc,#ID_DOCUMENT}}}
</BOUCLE_doc>

[(#REM)-- Tri par date et affichage des contenus --]
<BOUCLE_tri(POUR){tableau #GET{contenus}}{!par cle}>
        [(#REM)<br />Date : #CLE]

        [(#REM)Articles]
        <BOUCLE_test_art(POUR){tableau #VALEUR}{cle==art}>
        <INCLURE{fond=contenu-detail}{id_article=#VALEUR}{env}>
        </BOUCLE_test_art>

        [(#REM)Syndic]
        <BOUCLE_test_synd(POUR){tableau #VALEUR}{cle==synd}>
        <INCLURE{fond=contenu-detail}{id_syndic_article=#VALEUR}{env}>
        </BOUCLE_test_synd>

        [(#REM)Docs]
        <BOUCLE_test_doc(POUR){tableau #VALEUR}{cle==doc}>
                <INCLURE{fond=contenu-detail}{id_document=#VALEUR}{env}>
        </BOUCLE_test_doc>
</BOUCLE_tri>

Patrick

Patrick VINCENT a écrit :

Je reprends tardivement ce code, merci pour vos réponses.

Il s'agissait effectivement d'une union et non d'une jointure :frowning:

Une solution qui fonctionne sur la base l'age relatif :

<BOUCLE_art(ARTICLES){par date}{inverse}{id_rubrique?}>
  <BOUCLE_synd_art(SYNDIC_ARTICLES){par
date}{inverse}{id_rubrique?}{age_relatif<0}{doublons syndart}>
    SYNDIC : #_synd_art:TITRE / #_synd_art:DATE<br />
  </BOUCLE_synd_art>
    ARTICLE : #_art:TITRE / #_art:DATE<br />
</BOUCLE_art>
  <BOUCLE_synd_art1(SYNDIC_ARTICLES){par
date}{inverse}{id_rubrique?}{doublons syndart}>
    SYNDIC : #_synd_art1:TITRE / #_synd_art1:DATE<br />
  </BOUCLE_synd_art1>
</B_art>
  <BOUCLE_synd_art2(SYNDIC_ARTICLES){par date}{inverse}{id_rubrique?}>
    #_synd_art2:TITRE
  </BOUCLE_synd_art2>
<//B_art>

Patrick

yoh a écrit :

Tu dois y arriver avec les boucles sur des éléments hétérogènes :

Tu sélectionnes l'article le plus récent et tu affiches les syndic
articles plus récent puis tu affiches l'article etc ...
La dernière boucle permet d'afficher les syndic article les plus vieux
et est là au cas il n'y aurait pas du tou d'article.

L'inconvénient de ce type de boucle, c'est que la pagination est
impossible.

++

<BOUCLE_art(ARTICLES){par date}{inverse}{id_secteur?}{id_rubrique?}>
<BOUCLE_synd_art(SYNDIC_ARTICLE){par
date}{inverse}{id_secteur?}{id_rubrique?}(age_relatif<0}{doublons syndart}>
#_synd_art:TITRE
</BOUCLE_synd_art>
#_art:TITRE
</BOUCLE_art>
</B_art>
<BOUCLE_art2(ARTICLES){par
date}{inverse}{id_secteur?}{id_rubrique?}{doublons syndart}>
#_synd_art:TITRE
</BOUCLE_art2>
<//B_art>

Patrick VINCENT a écrit :

Bonjour à tous,

Je cherche à sélectionner et afficher les 10 éléments les plus récents
des contributions articles et syndic_articles confondues d'un site,
avec un critère de secteur ou de rubrique optionnel.

La boucle suivante fonctionne :

<BOUCLE_liste(syndic_articles syndic articles){par
date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <br />#TITRE
</BOUCLE_liste>

...si ce n'est que je n'arrive pas à exploiter les résultats : dans le
corps de la boucle je ne peux pas sélectionner le critère #ID_ARTICLE
ou #ID_SYNDIC_ARTICLE en fonction du contexte de l'occurence et
appeler en fonction un INLCURE, comme je voulais le faire initialement :

<BOUCLE_liste(syndic_articles syndic articles){par
date}{inverse}{id_secteur?}{id_rubrique?}{0,10}>
    <BOUCLE1(ARTICLES){id_article}><INCLURE{fond=1}...></BOUCLE1>
<BOUCLE2(SYNDIC_ARTICLES){id_syndic_article}><INCLURE{fond=2}...></BOUCLE2>

</BOUCLE_liste>

J'essaye d'éviter les tableaux, si quelqu'un a une idée.

Merci

Patrick
SPIP : 1.9.3dev - 11227