Bonjour tcharlss,
Dans le premier message que j’ai adressé, je présente la boucle que je recherche à traduire en sql. C’est une boucle (MOTS) qui pour chaque mot clé trouvé (ce sont des dates) recherche ensuite les articles associés à ces mots clés, affiche plusieurs informations de la table (ARTICLES) puis pour chaque article d’autres mots clés (des localisations). Il y a trois boucles entre guillemets en cascade interrogeant il me semble deux tables..
Comme je l’ai indiqué, j’ai pris plaisir à écrire la boucle spip mais la rédaction de la requête sql permettant d’obtenir le même résultat est pour moi plus compliquée. Je ne maitrise pas sql et il me faut un fichier xml reprenant les résultats de la boucle spip. D’où mon intervention sur ce forum.
Je ne suis pas une société et je fais cela à titre individuel. Je tente d’apprendre, de mettre en page et d’imprimer un résultat.
En analysant le debug de ma boucle
voici les requetes sql que j’obtiens (attention je les ai écourtées avec [...]) :
Pour la première boucle _mots_frères_années
SELECT mots.id_mot, mots.titre
FROM spip_mots AS mots
WHERE (mots.id_groupe = 7)
AND ((mots.id_mot IN (126,125,125,125,128,127,129,129,129,130,130,130,131,[...]130,132,133,134,135,134,136))
OR (mots.id_mot IN (136,138,140,138,139,139,139,141,141,142,[...]177,151,155,158,161,166,181,142,145,143))
OR (mots.id_mot IN (143,143,144,164,144,145,141,145,148,147,147,[...]186,172,168,168,169,170,175,176,184,189,190,152,171,171,188,411,187,162,175,163,163,146,153,148,177,154,327,337,158,383))
OR (mots.id_mot IN (154,164,164,171,170,171,172,182,[...] 388,389,391,395,396,404,342,343,344,345,345,347))
OR (mots.id_mot IN (348,349,350,186,183,135,177,176,128,[...]125,125,125,125,128,126,126,126,126,128,137,138,147))
OR (mots.id_mot IN (144,128,127,166,140,149,160,160,[...]166,166,169,170,175,180,181,185,185,185,185,197,188,183,143,144,153,168,178,175,190,130,187,172,172)))
ORDER BY mots.titre
Pour la boucle articles :
SELECT articles.id_article, articles.edition_num_format_image_oui, articles.edition_num_format_texte_oui, articles.edition_impr_moderne_oui, articles.fantome, articles.titre, articles.transcription_a_afficher, [...], articles.texte, articles.id_rubrique, articles.id_article, articles.lang
FROM spip_articles AS articles
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_objet = articles.id_article AND L1.objet='article')
WHERE (articles.statut = 'publie')
AND (L1.id_mot = 244)
AND ((articles.id_article IN (32,33,34,35,36,37,38,39,[...],341,342))
OR (articles.id_article IN (343,344,345,346,347,348,[...],619,620,621,623,624,627,628,629,630,631,632,633))
OR (articles.id_article IN (634,635,636,638,639,644,647,[...],955,956,957,958,959,961,962,963,965,966,969,970,971))
OR (articles.id_article IN (972,973,974,977,978,981,982,984,985,[...],1271,1272,1273,1274))
OR (articles.id_article IN (1275,1276,1277,1278,1279,1280,1281,[...],1882,1883,1884,1885,1887,1888,1889,1890,1891))
OR (articles.id_article IN (1893,1894,1896,1897,1898,1899,1900,1901,1903,1904,[...],1931,1932,1934,1935)))
GROUP BY articles.id_article
ORDER BY articles.titre
et pour la boucle localisations :
SELECT mots.titre
FROM spip_mots AS mots
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_mot = mots.id_mot )
WHERE (mots.id_groupe_racine = 10)
AND (L1.id_objet = 867)
AND (L1.objet = 'article')
ORDER BY mots.titre
J’ai avancé mais ce sont des bouts de boucles, ce n’est pas toute la boucle que j’emploie pour afficher mes résultats en ligne.
Pour moi, la question maintenant c’est comment enchâsser ces bouts de requetes ou comment les employer pour obtenir un seul tableau de résultats que je pourrais traduire en xml ?
Bien à vous
Eric