Requete simple
Pour afficher des données d’une table SQL, on doit indiquer plusieurs paramètres :
FROM
identifie la table utilisée (par son nom),
SELECT
spécifie les champs voulus dans l’affichage (il faut les lister),
WHERE
indique les critères de sélection (par des opérations logiques)
ORDER BY
précise les tris successifs,
LIMIT
restreint le nombre d’occurrences en réponse.
Et la boucle d’exploration est lancée.....
Pour un squelette SPIP (ou une noisette, c’est a dire une partie de squelette), la syntaxe SPIP s’insere dans du HTML avec une syntaxe analogue :
l’instruction <BOUCLE__xx(...){..}..{.}>
va recevoir successivement les trois paramètres de :
- la table concernée (nom avec/sans préfixe) : mis entre parenthèse,
- les critères de sélection (conditions logiques, implicitement coordonnées par des AND) : chaque expression est mise entre accolades
- les critères de tri (egalement avec la syntaxe de critère) : mot-code par suivi d’une liste de champs
- le nombre critère d’étendue (également en critère) : [1]
le contenu de la boucle (avant l’instruction de fin </BOUCLE__xx>
) va décrire en HTML la présentation des données affichées, essentiellement les valeurs de champ avec des balise de champ. : la syntaxe utilisée est le nom du champ en majuscules, précédé d’un #
.
Et c’est tout !
Ainsi SELECT 'id_article', 'titre', 'id_rubrique','date_redac' FROM 'ARTICLES' WHERE 'id_secteur' = 33 AND 'id_rubrique' > 30 ORDER BY 'id_article','titre' LIMIT 50 ;
s’écrit en SPIP dans une partie de squelette HTML :
- <BOUCLE_simple(ARTICLES){id_secteur=33}
- {id_rubrique>30}
- {par id_article, titre}{0,50}>
- #ID_ARTICLE, #TITRE , #ID_RUBRIQUE <br />
- </BOUCLE_simple>
Pour revoir cela en application, Balises, critères et filtres :les spécialistes d’XML apprécieront !
Requete multi-table
C’est à peine plus complexe si vous voulez utiliser plusieurs tables ; soit vous imbriquez les boucles de parcours, soit vous construisez une jointure implicite en declarant plusieurs tables dans la partie entre parenthèses -sans autre séparateur que l’espace), et vous indiquerez un critère de jointure avec des champs des deux tables, s’ils ont des noms différents [2] .
Personnellement je n’ai pas souvenir d’avoir vu un langage aussi simple dans ma vie d’informaticien, même avec BO !
Bon, il y a quelques limites par rapport au SQL :
la plus evidente, les opérations ensemblistes d’UNION (correspondant à des filtres OR logiques) ne sont pas directement accessibles [3]
d’autres opérations complexes SQL (Des boucles de regroupementsont aussi complexes à gérer en SPIP....
Mais vous pouvez toujours préparer un CREATE VIEW sql (si vous avez la main sur votre SGBD) et l’appeler comme une table SPIP !
Oui, petit oubli, mais pas des moindres facilités : vous n’avez aucune déclaration a faire a SPIP pour lui faire lire une table non SPIP, ou meme pour lire dans une seconde base de données [4]
Article publié le 11 avril 2014, et actualisé en février 2019 .
Répondre à cet article