Dans un squelette, je fais des essais avec la boucle #DATA et une requête sql comme source.
Si je fais un truc simple, ça fonctionne et je suis content. Du genre:
[(#SET{requete,"SELECT COUNT(*) AS soncompte FROM spip_auteurs"})]
<BOUCLE_d2(DATA){source sql, #GET{requete}}>
La bas : #VALEUR{soncompte} <br>
</BOUCLE_d2>
Si je fais un truc moins simple, ça fait une 404. Du genre:
[(#SET{requete,"SELECT sau.nom AS lauteur, COUNT(sau.id_auteur) AS soncompte FROM spip_articles sar
INNER JOIN spip_auteurs_liens saul ON saul.id_objet = sar.id_article
INNER JOIN spip_mots_liens smol ON smol.id_objet = sar.id_article
INNER JOIN spip_auteurs sau ON sau.id_auteur = saul.id_auteur
INNER JOIN spip_mots smo USING(id_mot)
WHERE smol.id_mot LIKE 22
GROUP BY sau.nom
ORDER BY soncompte DESC"})]
<BOUCLE_d1(DATA){source sql, #GET{requete}}>
Ici : #VALEUR{lauteur} et #VALEUR{soncompte} <br>
</BOUCLE_d1>
Pourtant la requête sql est bonne et pour la petite histoire, elle me renvoie bien le nombre d’articles écrit par auteur pour un mot clé donné. Les mots clés étant associés aux articles et non aux auteurs.
Une idée ?
En vous remerciant chaleureusement, c’est de saison
C’est peut-être le compilateur qui s’emmêle les pinceaux en présence des parenthèses dans le #SET : ça peut parfois amener à tronquer le texte ou supprimer des espaces.
Est-ce que [(#GET{requete}|var_dump)] retourne le texte complet ?
J’ai trouvé, il faut des guillemets …LIKE "#ENV{id_mot}" AND_ et voila donc ce qui fonctionne pour moi.
[(#SET{requete,"SELECT sau.nom AS lauteur, COUNT(sau.id_auteur) AS soncompte FROM spip_articles sar INNER JOIN spip_auteurs_liens saul ON saul.id_objet = sar.id_article INNER JOIN spip_mots_liens smol ON smol.id_objet = sar.id_article INNER JOIN spip_auteurs sau ON sau.id_auteur = saul.id_auteur INNER JOIN spip_mots smo USING(id_mot) WHERE smol.id_mot LIKE "#ENV{id_mot}" AND sar.statut LIKE 'publie' GROUP BY sau.nom ORDER BY soncompte DESC"})]
<BOUCLE_d1(DATA){source sql, #GET{requete}}>
<h3>#VALEUR{soncompte} article(s) pour #VALEUR{lauteur}</h3>
</BOUCLE_d1>
Si ce n’est que c’est pas très lisible d’avoir la requête en une ligne, je suis content.
Merci pour la discussion.
Je suppose qu’il y a d’autres moyens pour faire la même chose, comme utiliser mes_fonctions.php mais je manque de connaissances en PHP.
Le filtre |concat est pratique pour construire des expressions complexes comme ça.
Il peut recevoir plusieurs arguments qu’il concatene.
Et a priori pour la lisibilité tu peux aller à la ligne pour chaque argument.