Gastero Prod

  • Aller au menu
  • Aller au contenu
  • Aller au pied de page
  • Accueil
  • Blog
  • Photos
  • Liens
  • Lifestream
Vous pourriez préférer naviguer sur la version spécifique iPhone / iPod Touch de ce site...

Un exemple de jointures entre plusieurs tables dans une boucle SPIP

Date de publication
7/déc.
2007
Commentaires
3 commentaires
Tags
SPIP

Les jointures sont disponibles depuis quelque temps dans SPIP, mais tout comme plein de nouveautés des dernières versions, je n’y avait pas encore goûté. C’est maintenant fait, et aux quelques errements initiaux près, c’est vraiment à connaitre. Voici un exemple très concret.

Utilisant le plugin Agenda pour gérer des événements1, j’ai eu besoin de lister chronologiquement les événements rattachés à des articles ayant un mot clef particulier.

Le code du squelette aurait été beaucoup plus simple si les mots clefs étaient rattachés directement aux événements, mais je préfère largement attacher les mots clefs aux articles, l’ajout aux événements étant laborieux.

Le problème, donc, est de lister {par date} des (EVENEMENTS) liés à des (ARTICLES) qui ont au moins un mot clef avec {id_mot=3}.

La technique traditionnelle serait de faire une boucle (ARTICLES) pour filtrer selon le mot clef, puis dans son corps une boucle sur les (EVENEMENTS) de chaque article.

Malheureusement, cela ne permet pas un classement {par date} de l’ensemble des (EVENEMENTS), mais seulement article par article.

C’est là que les jointures arrivent à la rescousse. L’idée est donc de faire une unique boucle, qui porte sur deux sources de données, les (ARTICLES) et les (EVENEMENTS), le lien étant l’id_article.

Voici ce que cela donne pour lister des événements passés rattachés aux articles de la rubrique courante ayant un mot clef avec {id_mot=3} :

<BOUCLE_evenements(EVENEMENTS articles mots_articles){par date}{inverse}{id_rubrique}{id_mot=3}{age>0}>
  <li>[(#DATE_DEBUT|affdate{'d/m/Y'})]</li>
</BOUCLE_evenements>
Télécharger

Il faut tester différentes syntaxes pour arriver au résultat, mais globalement, quelques règles découvertes sur le tas peuvent aider :

  • La première donnée peut être identifiée par son alias, mais les autres doivent être identifiées par leur nom de table, hors préfixe
  • Il semble que le compilateur de SPIP comprend bien que l’age demandé est celui des (EVENEMENTS) et non celui des (ARTICLES), sans doute parce que les (EVENEMENTS) sont l’élément principal de la boucle
  • Alors que le critère {id_mot=3} fonctionne sur une boucle (ARTICLES), il ne fonctionne pas sur la table articles, d’où nécessité d’ajouter la seconde jointure sur la table mots_articles

A vous de tester !

Notes

[1] En remplacement de mon vieil agenda développé il y a quelques années

Commentaires

Commenter ce billet

RSS

Commentaires déjà déposés

  • 27 février 2008 à 16h13
    Commentaire de Sylvain

    Ouh là ! mais c’est super ça !

    ça va me simplifier les choses ... voir peut-être ouvrir des possibilités (faudra que je vois à l’usage ;-) )

    (...) Malheureusement, cela ne permet pas un classement par date de l’ensemble des (EVENEMENTS), mais seulement article par article.

    En fait si on peut. Je fais déjà la même chose depuis un bout de temps avec, certes plusieurs boucles, mais surtout {doublons XXX}

    je vais tenter de traduire ton exemple, si j’ai bien compris ... car ça devrait donner :

    tout est dans l’inversion du doublons :

    • le premier lot de boucles, ne sert en fait qu’a fait la sélection (sans trie par ...) ;
    • puis on utilise l’inversion de {!doublons XXX} pour ne prendre en fait que ce qui « a été retenu » par {doublons XXX} ;
    • enfin on trie {par date}, {0,10}, etc ..

    c’est dingue ce que l’on peut faire, depuis qu’ils ont refondu le compilo :-o
    en plus ils l’améliorent régulièrement ... je fais des empilements de boucles et balises de plus en plus complexes et suis toujours surpris que ça fonctionne ;-)


    Avec les jointures ça va devenir encore pire :-D

    merci pour l’astuce Nicolas.

    Répondre à ce message

  • 29 octobre 2009 à 15h16
    Commentaire de reno

    c’est exactement la problematique dans laquelle j’etais pour realiser cet agenda
    http://www.ninespirit.org/spip.php?...
    Thank U very much

    Répondre à ce message

    • 29 octobre 2009 à 16h00
      Commentaire de Nicolas Hoizey

      Bravo, jolie utilisation !

      Répondre à ce message

Backtweets

Avec un tag commun

  • Une arborescence dynamique et contextuelle
  • Le même agenda que Gastero Prod avec SPIP
  • Gastero Prod 4, les standards et l’accessibilité
  • La galerie SPIP, pour réutiliser facilement les images et documents
  • Un site valide et accessible avec SPIP, c’est (de plus en plus) possible !

Derniers billets

  • Quelques petits ajustements...

    Vous l’avez peut-être remarqué vous même si vous faites partie des rares à venir de temps en temps sur le site, mais certainement pas si vous me lisez via le flux RSS, j’ai fait quelques ajustements, notamment sur la page d’accueil.

    Date de publication
    11/mars
    2010
    Commentaires
    2 commentaires
    Tags
    Gastero Prod
  • Les spammeurs s’y connaissent en CSS

    Un p’tit malin qui se fait appeler Sylvain a laissé un commentaire très sympathique sur mon billet précédent. Mais il a aussi glissé subrepticement un lien vers un site de poker fashion...

    Date de publication
    1/mars
    2010
    Commentaires
    5 commentaires
    Tags
    CSS, SPAM
  • Tumblr aime mes méduses

    Vous avez sans doute déjà vu ma belle photo de méduses fluorescentes — une de mes préférées — que ce soit ici, sur Flickr, JPG Magazine, deviantArt ou plus récemment sur RedBubble. Et bien elle vient d’être publiée en série sur de nombreux micro blogs Tumblr, lui apportant une énorme visibilité.

    Date de publication
    25/fév.
    2010
    Commentaires
    aucun commentaire
    Tags
    moi, photo

Derniers commentaires

  • ventrea sur Quelques petits ajustements... : Sympa les polices. Juste un petite remarque, dans les textes le lissage des caractères est assez (...)

  • NiKo sur Les spammeurs s’y connaissent en CSS : Vérifie très vite, car effectivement tu es vulnérable aux XSS en l’état.

  • Cédric sur Les spammeurs s’y connaissent en CSS : Ça fait quelques temps déjà que ce genre de message fleurit dans les commentaires. La parade très (...)

  • Rik sur Les spammeurs s’y connaissent en CSS : Comme le dit un certain edas, autoriser l’attribut style c’est s’exposé à de belles XSS. Plus (...)

  • NiKo sur Un Netbook comme videur de cartes amélioré ? : C’est pour ça que perso je pré-derushe mentalement en ne déclanchant que si j’estime cela vraiment (...)

  • NiKo sur Un Netbook comme videur de cartes amélioré ? : A part de céder à la tentation d’un nouvel achat techno, je vois vraiment pas l’intérêt d’acheter (...)

  • NiKo sur Google Chrome sur Mac, bilan mitigé : > Pas de barre de titre, donc je ne connais pas le nom de la page dès que j’ai plus de 5 onglets (...)

  • Sur Commentaires désactivés temporairement : Un commentaire sur la 2.2.0 svn !

  • Frank Taillandier sur Google Chrome sur Mac, bilan mitigé : Avec la version 5.0.322 du canal de dev le drag’n’drop dans la barre de signet « marche » sauf (...)

  • Xavier sur Google Chrome sur Mac, bilan mitigé : Pour speed tracer, il faut lancer chrome avec le parametre —enable-extension-timeline-api (...)

Nuage des tags les plus fréquents

  1. 3D
  2. 404
  3. accessibilité
  4. agenda
  5. Ajax
  6. animal
  7. animation
  8. Apple
  9. bande dessinée
  10. blog
  11. Blogmarks
  12. Blu-Ray
  13. bookmarks
  14. Canon
  15. cinéma
  16. citation
  17. Clever Age
  18. client riche
  19. concert
  20. couleur
  21. création
  22. CSS
  23. Daft Punk
  24. développement
  25. design
  26. dessin animé
  27. DotClear
  28. e-commerce
  29. ergonomie
  30. FeedBurner
  31. film
  32. Firefox
  33. Flickr
  34. fun
  35. Gastero Prod
  36. Google
  37. Greasemonkey
  38. hébergement
  39. HD
  40. humour
  41. hype
  42. IBM
  43. image
  44. informatique
  45. Internet
  46. iPhone
  47. JavaScript
  48. jeux
  49. jQuery
  50. Les Nuls
  51. Linux
  52. littérature
  53. livre
  54. logiciel
  55. logiciel libre
  56. loisirs
  57. Mac
  58. macro
  59. Microsoft
  60. moi
  61. Mozilla
  62. musique
  63. NetBook
  64. ordinateur
  65. oups
  66. photo
  67. PHP
  68. phpHeaven
  69. phpMyChat
  70. PicLens
  71. presse
  72. publicité
  73. recherche
  74. RewriteRule
  75. RSS
  76. sémantique
  77. SEO
  78. société
  79. Sony
  80. SPIP
  81. standards
  82. tag
  83. télévision
  84. vidéo
  85. Web 2.0
  86. Windows
  87. Yahoo !

A propos

L'auteur

Dans la vie professionnelle, co fondateur et Directeur Technique du cabinet de conseil nouvelles technos Clever Age, et dans la vie extra-professionnelle, créateur et animateur de Gastero Prod, flickRate et Ergothon, responsable technique de Marketing Planet et d’autres sites web, passionné d’Internet, de cinéma, de littérature, de musique ...

L'outil
Ce site est réalisé avec le logiciel libre de gestion de contenus Web SPIP en version 2.2.0-dev SVN [15493]

Identité 2.0

Vous pourrez aussi me trouver sur ces différentes communautés en ligne :

Réseaux sociaux
Copains d’avant, Diigo, Facebook, LinkedIn, netvibes, Twitter
Photo
deviantART, Flickr, JPG Magazine, Photo.net
Geek stuff
Ohloh, Userscripts.org
Autres
La musique sur Last.fm, Le vin sur Cork’d, Les livres sur Shelfari

Blogoliste

Proches
  • Jacqueline Oud
  • Marron show
  • Glagla Dot Org
  • Cédric Hoizey
Relations
  • Chez Xavier - Thoughts
  • La Case de l’Oncle Tom
  • Maître shteshitsu
  • Prendre un Café
  • Un Electron Libre...
Autres
  • Clever Age
  • Marketing Planet
Creative Commons License

Sauf mention explicite, tous les contenus de ce site sont la propriété de Nicolas Hoizey, et sont sous licence Creative Commons « Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique » version 2.0 adaptée à la France.