Boucle date auteur une fois par jour

Bonjour,
je cherche a faire une boucle permettant d’afficher un seule ligne par jour et par auteur même si ils ont plusieurs articles du même jour :

4/11 Jacques
4/11 Alain
5/11 Jacques
5/11 Jean

J’ai essayé le filtre unique mais du coup ça ne me les affiche plus pour les autres jours. Il doit y avoir une ruse avec doublons mais je ne percute pas :frowning:

merci à vous

Le 04/11/2016 à 12:34, Solidairnet Chôm'Actif a écrit :

Bonjour,
je cherche a faire une boucle permettant d'afficher un seule ligne par jour et par auteur même si ils ont plusieurs articles du même jour :

4/11 Jacques
4/11 Alain
5/11 Jacques
5/11 Jean

J'ai essayé le filtre unique mais du coup ça ne me les affiche plus pour les autres jours. Il doit y avoir une ruse avec doublons mais je ne percute pas :frowning:

bonjour,
pas sur d avoir bien compris (qu est ce qu il faut afficher par auteur ?), mais... avec un critere {0,1} et un classement {!par date} ca ne marcherait pas ?
amicalement
triton

Bonjour,

le critère fusion est probablement ce que tu cherches.

http://www.spip.net/fr_article5166.html

"Il est également possible d’utiliser des expressions SQL en paramètre du critère. La boucle suivante affichera la liste des années pour lesquelles il y a au moins un article :

     <BOUCLE_annees_avec_articles(ARTICLES){par date}{inverse}{fusion YEAR(date)}>
             [(#DATE|annee)]
     </BOUCLE_annees_avec_articles>
"
Donc la même avec DAYOFYEAR(date) devrait faire ce que veux pour une année donnée. Si cela doit être valable pour plus de temps, il faudra certainement adapter. Un truc dans le goût par exemple :
     <BOUCLE_a(ARTICLES){fusion YEAR(date)}{fusion DAYOFYEAR(date)}{par date}{inverse}{"<br/>"}>
             [(#DATE|affdate{Y - M - d})]
     </BOUCLE_a>

De la doc ( en anglais par contre ) sur les fonctions de dates de mysql :
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

La question à 100 points restant est par contre "comment faire pour avoir le nombre de lignes groupées pour chaque tour de boucle ?". En sql, ce serait un simple COUNT(*), mais je ne vois pas de critère en spip permettant d'ajouter ça dans les champs de la requête ...
Si quelqu'un a l'info, je suis très preneur !

Merci Triton,
je veux juste afficher la date et le nom de l’auteur (mais une seule fois par jour)
Par exemple la boucle ci-dessous m’affiche bien la date et le nom, mais plusieurs fois si l’auteur a plusieurs articles du même jour.

<BOUCLE_articles(ARTICLES) {tout}{!par date}>

<BOUCLE_liens(spip_auteurs_liens) {tout} {id_objet=#ID_ARTICLE}>

<BOUCLE_auteur(AUTEURS) {tout} {id_auteur=#ID_AUTEUR} {0,1}>

[(#DATE|affdate_court)] #NOM #PRENOM

</BOUCLE_auteur>

</BOUCLE_liens>

</BOUCLE_articles>

Il y a bien le critère fusion mais je ne vois pas trop comment l’utiliser http://www.spip.net/fr_article5166.html

encore merci

Thierry

Re,

Il y a bien le critère fusion mais je ne vois pas trop comment l'utiliser {fusion champ_sql} - SPIP

C'est ce que j'ai détaillé, avec exemple ...

Brrr ça me pique le yeux :slight_smile: mais merci je vais essayer de creuser, cependant est ce que cela ne va pas me regrouper les articles d’auteur différents?

encore merci

Le 04/11/2016 à 16:32, Solidairnet Chôm'Actif a écrit :

Brrr ça me pique le yeux :slight_smile: mais merci je vais essayer de creuser, cependant est ce que cela ne va pas me regrouper les articles d'auteur différents?

Sans modifications en plus si, ceci dit, cela me paraissait un bon début pour comprendre le critère fusion ^^
Si tu veux pousser le truc, tu peux aussi grouper par id_auteur... Mais ça commence à devenir franchement tordu l'affaire car il faut en plus une jointure :

     <BOUCLE_a(AUTEURS articles){fusion YEAR(date)}{fusion DAYOFYEAR(date)}{!par articles.date}>
             [<h4>(#DATE|affdate{Y - M - d}|unique)</h4>]
             <div>#LOGIN</div>
     </BOUCLE_a>

Ce qui donne sous le capot en SQL , attention aux yeux yeux :

SELECT YEAR(date), DAYOFYEAR(date), L2.date, auteurs.login FROM `basedusite`.spip_auteurs AS `auteurs`
INNER JOIN `basedusite`.spip_auteurs_liens AS L1 ON ( L1.id_auteur = auteurs.id_auteur )
INNER JOIN `basedusite`.spip_articles AS L2 ON ( L2.id_article = L1.id_objet AND L1.objet='article')
WHERE NOT((auteurs.statut = '5poubelle'))
GROUP BY YEAR(date),DAYOFYEAR(date),auteurs.id_auteur
ORDER BY L2.date DESC

De prime abord, j'aurais ajouté {fusion id_auteur} mais la boucle semble ajouter d'elle même le id_auteur en fin de clause group by ...
Donc je ne l'ai pas mis.

ahah merci tu es trop rapide je n’ai même pas eu le temps de m’arracher quelques cheveux

je m’en vais de ce pas tester et adapter pour ma sauce

merci encore, je reviens bientôt :slight_smile: